[英]How can I write a C++ function that returns different types of std::list based on processing?
[英]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;
}
兩件事(我想這是您要問的問題):
符號movements
是您需要調用的功能 。 您通過通常的movements(pices)
完成它。
函數返回的列表中的函數對象不是可以取消引用的指針。 您可以將它們用作常規函數,並像f(pieces)
這樣調用它們。
另外,在C ++中,沒有像容器這樣的標准“數組列表”。 列表是列表,不能像數組或向量一樣被索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.