Я использую сопрограмму в boost1.53, см. Мой код ниже:
boost::coroutines::coroutine<int()> f(std::bind(foo, ...));
std::vector<decltype(f)> container; // it can be compiled
container.push_back(f); // compile error
Ошибка:
no matching function for call to ‘std::vector<boost::coroutines::coroutine<int(),0> >::vector(paracel::coroutine<int>&)’
Обновление: ошибка возникает из-за того, что в 'boost :: coroutines :: coroutine' нет конструкции / оператора копирования, в данном случае я хочу сохранить только 'f в контейнер, который сопоставляет индекс с' f '.
Еще пробовал unordered_map и emplace_back, все равно не работает!
Как заставить его работать на C ++?
Update2: я пробовал vector, unordered_map, map вместе с emplace_back, push_back, std :: move, и все не удалось. Но list и deque подходят для push_back / emplace_back и std :: move:
std::deque<decltype(f)> container1;
container.push_back(std::move(f)); // ok
std::deque<decltype(f)> container2;
container.emplace_back(std::move(f)); // ok
std::list<decltype(f)> container3;
container.push_back(std::move(f)); // ok
std::list<decltype(f)> container4;
container.emplace_back(std::move(f)); // ok
Почему?