【发布时间】:2019-06-05 10:50:06
【问题描述】:
我正在尝试回答在 C++ 中生成一个模板函数,该函数接受 std::function 的 std::list(我认为)。但是,我不确定如何理解我正在使用的数据类型。
根据 GDB,我的数据类型是:
type = std::__cxx11::list<std::function<void(std::array<positions, 3>&)>, std::allocator<std::function<void(std::array<positions, 3>&)> > > (*)(const std::array<positions, 3> &)
如果我将输入称为movenents,我无法将元素作为数组访问我无法访问例如第一个元素为movement[0] 我不明白为什么会这样,因为类型看起来像一个列表。
我尝试将其作为数组访问,并尝试读取std::list containing std::function 并使用以下方式访问它:
for (auto f: movements) {
(*f)();
}
生成列表的函数如下所示:
auto movements(const pieces_positions &pieces) {
auto result = std::list<std::function<void(pieces_positions&)>>{};
for (auto i=0u; i<pieces.size(); ++i)
switch(pieces[i]) {
case positions::pos1:
result.push_back([i](pieces_positions& pieces){ pieces[i] = positions::pos2; });
break;
case positions::pos2:
result.push_back([i](pieces_positions& pieces){ pieces[i] = positions::pos1; });
result.push_back([i](pieces_positions& pieces){ pieces[i] = positions::pos3; });
break;
case positions::pos3:
result.push_back([i](pieces_positions& pieces){ pieces[i] = positions::pos2; });
break;
}
return result;
}
【问题讨论】:
-
尝试简单的
f();调用函数。 -
“我不能”是什么意思?到底是什么问题?
标签: c++ templates std-function stdlist