如何在 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;
}

有两件事(我认为你要问的是):

  1. 符号movements是您需要调用的函数。你按照通常的 movements(pices).

  2. 来做
  3. 函数returns列表中的函数对象不是可以解引用的指针。您将它们用作普通函数并这样调用它们,例如 f(pieces).

此外,在 C++ 中,没有像容器这样的标准 "array-list"。列表就是列表,不能像数组或向量那样被索引。