10 Ağustos 2016 Çarşamba

python'dan C++ Kullanmak

BOOST_PYTHON_IMPORT
Şöyle yaparız.
class A {
    ... // constructor is omitted 
public:
    const std::string str1;
};
class B {
public:
    std::shared_ptr<A> a;
}

BOOST_PYTHON_IMPORT(wrapped) {

    class_<A, std::shared_ptr<A>>("APy")
    .def_readonly("str1", &A::str1);

    class_<B>("BPy")
    .def_readwrite("a", &B::a);
}
Python'da kullanmak için şöyle yaparız.
import wrapped as wr
b = wr.BPy()
s1 = b.a.str1 // APy wrapper created
s2 = b.a.str1 // new APy wrapper created even though object is the same

class_ Sınıfı
C++ kodunu python'dan çağırmak için kullanılır

Constructor
Elimizde şöyle bir sınıf olsun
class Example
{
public:
  Example()
  {
    std::cout << "hello\n";
  }
  Example(const Example& e)
  {
    std::cout << "copy\n";
    counter++;
  }
  ~Example()
  {
    std::cout << "bye\n";
  }
  Example& count()
  {
    std::cout << "Count: " << counter << std::endl;
    return *this;
  }
  static int counter;
};
int Example::counter = 0;
Şöyle yaparız.
class_<Example>("Example", init<>())
def metodu
Açıklaması şöyle. C++ kodunda & kullanılsa bile nesnelerin copy constructor metodunun çağrılmasını sağlar.
copy_non_const_reference is a model of ResultConverterGenerator which can be used to wrap C++ functions returning a reference-to-non-const type such that the referenced value is copied into a new Python object.
Şöyle yaparız.
usingclass_ c;
c.def("count", &Example::count,
 return_value_policy<copy_non_const_reference>());
Bu sınıfı Python'da kullanmak için şöyle yaparız.
obj=Example()
obj.count().count()

Hiç yorum yok:

Yorum Gönder