9 Nisan 2017 Pazar

proto

Giriş
Şu satırı dahil ederiz.
#include <boost/proto/proto.hpp>

namespace proto = boost::proto;
callable_context Yapısı
double operator() - terminal + tensor metodu
Şöyle yaparız
// Values to replace the tensors
std::vector<double> args { 0, 111, 222, 333 };

// Handle the tensors:
template<size_t I>
double operator()(proto::tag::terminal, tensor<I>) const
{
  std::cout << this->args[I] << std::endl;
  return this->args[I];
}
double operator() - tag::plus + A + B metodu
Elimizde toplama işlemi olsun
eval(t1 + (t2 + t3)) =
Şöyle yaparız.

template<typename A, typename B>
double operator()(proto::tag::plus, A& a, B& b) const {
  auto va = proto::eval(a, *this);
  std::cout << " + " << std::endl;
  auto vb = proto::eval(b, *this);
  return va + vb;
}
eval metodu
Elimizde bir context olsun
struct context : proto::callable_context< context const >
{
  ...
};
Şöyle yaparız
auto r = proto::eval(t1 + (t2 + t3), context());
literal Sınıfı
Constructor
Elimizde kendi tanımladığım bir yapı olsun
template <size_t N> struct tensor { };
Bir,iki ve üçüncü parametrelere atıfta bulunmak için şöyle yaparız.
proto::literal<tensor<1> > t1;
proto::literal<tensor<2> > t2;
proto::literal<tensor<3> > t3;

Hiç yorum yok:

Yorum Gönder