я использую Ускоренная библиотека сопрограмм, и мне нужен мой сопрограмм, чтобы вернуться.
Это означает, что я должен быть в состоянии запустить сопрограмму с начала многократно.
Какие есть варианты?
Мой текущий обходной путь — каждый раз заново создавать свежую сопрограмму:
boost::coroutines::coroutine<int>::pull_type *source = new boost::coroutines::coroutine<int>::pull_type(
[&](boost::coroutines::coroutine<int>::push_type& sink){
sink(0);
cout << "Hello world!" << endl;
});
(*source)();
source = new boost::coroutines::coroutine<int>::pull_type(
[&](boost::coroutines::coroutine<int>::push_type& sink){
sink(0);
cout << "Hello world!" << endl;
});
(*source)();
source = new boost::coroutines::coroutine<int>::pull_type(
[&](boost::coroutines::coroutine<int>::push_type& sink){
sink(0);
cout << "Hello world!" << endl;
});
(*source)();
Поскольку сопрограммы из boost.coroutine переполнены стеком, их нельзя запускать несколько раз.
Из вашего примера не ясно, что вы хотите сделать:
Я вообще не вижу, что плохого в создании свежей сопрограммы каждый раз — они не дорогие в создании.
Если у вас в сопрограмме много данных, поэтому их создание дорого, переместите все это в некоторый класс данных и передайте ссылку на него в сопрограмму.