如何在 C++ 中访问 std::list 中的 std::function
How can I access std::function in std::list in C++
我试图回答在 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
我无法访问作为数组的元素 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;
}
有两件事(我认为你要问的是):
符号movements
是您需要调用的函数。你按照通常的 movements(pices)
.
来做
函数returns列表中的函数对象不是可以解引用的指针。您将它们用作普通函数并这样调用它们,例如 f(pieces)
.
此外,在 C++ 中,没有像容器这样的标准 "array-list"。列表就是列表,不能像数组或向量那样被索引。
我试图回答在 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
我无法访问作为数组的元素 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;
}
有两件事(我认为你要问的是):
符号
movements
是您需要调用的函数。你按照通常的movements(pices)
. 来做
函数returns列表中的函数对象不是可以解引用的指针。您将它们用作普通函数并这样调用它们,例如
f(pieces)
.
此外,在 C++ 中,没有像容器这样的标准 "array-list"。列表就是列表,不能像数组或向量那样被索引。