6 Ekim 2017 Cuma

coroutine pull_type Sınıfı

Giriş
Coroutine2 kütüphanesi Coroutine1'e tercih edilmeli
Version 1
Constructor
Şöyle yaparız.
// example.cpp

#include <boost/coroutine/all.hpp>
#include <iostream>
using namespace boost::coroutines;

void mycorofunc(coroutine<void>::push_type &sink){
  std::cout << "1";
  sink();
  std::cout << " 3";
}

int main() {
  coroutine<void>::pull_type source{mycorofunc};
  std::cout << " 2";
  source();
  std::cout << " 4!" << std::endl;
}
Version 2
Şu satırı dahil ederiz.
#include <boost/coroutine2/all.hpp>
Tanımlama
Şöyle yaparız. Sink ve pull_type long,long long double ve string nesneleri alabilir.
using V    = boost::variant<long, long long, double, std::string>;
using Coro = boost::coroutines2::coroutine<V>;
Constructor - Sink'i dolduran metodu ver
Şöyle yaparız.
class worker {
public:
  void import_data(Coro::push_type &sink) {
    sink(stol(fieldbuffer));
    sink(stod(fieldbuffer));
    sink(fieldbuffer); // Fieldbuffer is a std::string
  }

  std::string fieldbuffer = "+042.42";
};

Coro::pull_type _fieldloader(boost::bind(&worker::import_data, &w, _1));
Constructor - lambda 
Sink'i dolduran metod lambda olabilir. Şöyle yaparız.
using coro_t = boost::coroutines2::coroutine<bool>;

coro_t::pull_type source([](coro_t::push_type& sink) {
  ...
});
get metodu
Şöyle yaparız.
while (_fieldloader) {
  std::cout << _fieldloader.get() << "\n";
  _fieldloader();
}




Hiç yorum yok:

Yorum Gönder