![](/img/trans.png)
[英]How can I write a C++ function that returns different types of std::list based on processing?
[英]How can I access std::function in std::list in C++
我试图回答在C ++中生成一个Template函数,该函数接受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 :: function的std :: list并使用以下命令进行访问:
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)
完成它。
函数返回的列表中的函数对象不是可以取消引用的指针。 您可以将它们用作常规函数,并像f(pieces)
这样调用它们。
另外,在C ++中,没有像容器这样的标准“数组列表”。 列表是列表,不能像数组或向量一样被索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.