1

boost::python でラップできない特定のクラスはありますか? クラスをラップしようとしていますが、ダミー クラスではなく、それを使用するとエラーが発生します。

以下は動作しません...

#include <manu/manu.h>

void foo()
{
    // can call non-member Kernel(), which returns Kernel instance
    manu::Kernel* kernel = manu::Kernel(); 
}

BOOST_PYTHON_MODULE(mymodule)
{
    using namespace boost::python;
    class_<manu::Kernel>("Kernel", no_init) // doesn't like this
    ;
}

関数で使用できますが、class_ テンプレートに入れると、次のエラーが発生します。

manu_python.cpp:9: error: expected constructor, destructor, or type conversion before ‘*’ token
manu_python.cpp: In function ‘void init_module_manu()’:
manu_python.cpp:17: error: type/value mismatch at argument 1 in template parameter list for ‘template<class T, class X1, class X2, class X3> class boost::python::class_’
manu_python.cpp:17: error:   expected a type, got ‘manu::Kernel’

ただし、ダミー クラスを使用すると機能します。

class Foo
{
};

BOOST_PYTHON_MODULE(mymodule)
{
    using namespace boost::python;
    class_<Foo>("Kernel", no_init)
    ;
}

完全なクラスは manu.h で定義されていますが、完全には宣言されていません。このクラスは Python に公開できないだけですか?

manu.h には、Kernel というクラスと、Kernel のインスタンスを返す Kernel() という非メンバー関数があります。この関数は、Kernel クラスがテンプレートで使用されないようにしますか? もしそうなら、関数宣言ではなくクラスを参照していることをテンプレートに伝える方法はありますか?

4

1 に答える 1

0

私は同じ問題に遭遇し、このウェブサイトを見つけました: http://qiita.com/nishio/items/daff0e9be30f4b4d6fca

いくつかの読み取り可能なビットが問題を解決しました:

#include <boost/python/class.hpp>
于 2015-08-10T13:29:26.420 に答える