繁体   English   中英

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

[英]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;
}

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

  1. 符号movements是您需要调用的功能 您通过通常的movements(pices)完成它。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM