簡體   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