我试图回答在C ++中生成一个Template函数,该函数接受std :: function的std :: list(我认为)。但是,我不确定如何理解正在使用的数据类型。
根据GDB,我的数据类型是:
/* 1 */
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "db.message"
},
{
"v" : 1,
"key" : {
"who" : 1.0,
"sendTo" : 1.0
},
"name" : "who_sendTo",
"ns" : "db.message"
},
{
"v" : 1,
"key" : {
"msgTime" : 1.0
},
"name" : "msgTime_1",
"ns" : "db.message"
},
{
"v" : 1,
"key" : {
"msgTime" : 1.0,
"who" : 1.0,
"sendTo" : 1.0
},
"name" : "msgTime_1.0_who_1.0_sendTo_1.0",
"ns" : "db.message",
"background" : true
}
]
如果我调用输入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
,我不明白为什么,因为类型看起来像列表。
我尝试将其作为数组进行访问,并且尝试读取std::list containing std::function并使用以下命令进行访问:
movement[0]
生成列表的函数如下:
for (auto f: movements) {
(*f)();
}
答案 0 :(得分:3)
两件事(我想这是您要问的问题):
符号movements
是您需要调用的功能。您可以按照通常的movements(pices)
进行操作。
函数返回的列表中的函数对象不是可以取消引用的指针。您可以将它们用作常规函数,并像f(pieces)
这样调用它们。
此外,在C ++中,没有像容器这样的标准“数组列表”。列表是列表,不能像数组或向量一样被索引。