28 Aralık 2017 Perşembe

phoenix

Giriş
Şu satırı dahil ederiz.
#include <boost/phoenix.hpp>
Kolay kullanım için şu satırları dahil ederiz.
namespace phx = boost::phoenix;
using boost::phoenix::placeholders::arg1;
using boost::phoenix::local_names::_a;
std::place_holders::_1, _2 yerine boost::phoenix::arg_names::arg1, arg2 kullanılır.

for_each metodu
Şöyle yaparız.
std::vector<int> const small_ints {1, 2, 3, 4, 5};
std::vector<int> const big_ints {11, 12, 13, 14, 15};

namespace phx = boost::phoenix;
using boost::phoenix::placeholders::arg1;
using boost::phoenix::local_names::_a;

std::vector<int>::const_iterator big_ints_it;
std::for_each(small_ints.cbegin(), small_ints.cend(),
  phx::for_each(phx::cref(big_ints),phx::lambda(...)[...])
);
function Sınıfı
Şöyle yaparız.
struct MyType {
  MyType()
    : complete_(complete_f { this }) 
  { }

  void doSomething() { }

private:    
  struct complete_f {
    MyType* _this;
    void operator()() const {
      // do something with _this, e.g
      this->doSomething();
    }
  };

  boost::phoenix::function<complete_f> complete_;
};
ref metodu
lambda üretir.

Örnek
Şöyle yaparız.
namespace phx = boost::phoenix;

boost::mutex mx;
boost::condition_variable cv;
boost::unique_lock<boost::mutex> lk(mx);
cv.wait(lk, phx::ref(m_queue_size) > 0);
Örnek
Şöyle yaparız
using boost::phoenix::placeholders::arg1;
using boost::phoenix::local_names::_a;

phx::lambda(_a=arg1)[phx::ref(std::cout) << '(' << _a << ", " << arg1 << "), "]




Hiç yorum yok:

Yorum Gönder