Я пытаюсь ответить на генерацию функции Template в C ++, которая принимает std :: list из std :: function (я думаю). Однако я не уверен, как понять тип данных, с которыми я работаю.
Согласно 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 :: list, содержащий 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;
}