如何在C ++中的std :: list中访问std :: function

时间:2019-06-05 10:50:06

标签: c++ templates std-function stdlist

我试图回答在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)();
    }

1 个答案:

答案 0 :(得分:3)

两件事(我想这是您要问的问题):

  1. 符号movements是您需要调用的功能。您可以按照通常的movements(pices)进行操作。

  2. 函数返回的列表中的函数对象不是可以取消引用的指针。您可以将它们用作常规函数,并像f(pieces)这样调用它们。

此外,在C ++中,没有像容器这样的标准“数组列表”。列表是列表,不能像数组或向量一样被索引。