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 クラスがテンプレートで使用されないようにしますか? もしそうなら、関数宣言ではなくクラスを参照していることをテンプレートに伝える方法はありますか?