Ответы пользователя по тегу Python
  • Boost.python и указатели

    Wyrd
    @Wyrd
    Архитектор
    Предположение: цепляется не та либа-переходник (имеется в виду что-то вроде boost_python-vc100-mt-gd-1_43.dll). Возможно, у вас ее имя без версии (можно так буст настроить)? возможно вы обновили буст а либу не пересобрали?

    Предположение 2 (сомнительное): С++ часть скомпилирована не под тот питон, которым запускают?
    Ответ написан
    2 комментария
  • Boost.python и указатели

    Wyrd
    @Wyrd
    Архитектор
    Честно говоря, никогда не пользовался этой штуковиной, но ради интереса решил попробовать.
    И… все заработало (с учетом мелких поправок кода для «компилябельности»).

    hello.cpp:
    #include <boost/python.hpp>
     
    using namespace boost;
    using namespace boost::python;
     
    struct Foo
    {
       virtual ~Foo() {}
       virtual void Print() = 0;
    };
     
    struct FooWrap : Foo, wrapper<Foo>
    {
        void Print()
        {
            this->get_override("Print")();
        }
    };
     
    void ProcessFoo(Foo *obj) { obj->Print(); }
     
    BOOST_PYTHON_MODULE(hello_ext)
    {
        class_<FooWrap, boost::noncopyable>("Foo")
            .def("Print", pure_virtual(&Foo::Print));
        def("ProcessFoo"&ProcessFoo);
    }


    hello.py:
    import hello_ext
     
    class NewFoo(hello_ext.Foo):
       def Print(self):
          print 'Print call'
     
    hello_ext.ProcessFoo( NewFoo() )


    Запуск:
    E:Temppython>"d:/Coding/Python 2.7/python.exe" hello.py
    Print call


    Тех. данные:
    boost 1.43
    MSVS 2010 SP1
    python 2.7
    компилировалось с помощью bjam
    Ответ написан
    2 комментария