是否有某些类不能被 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 类在模板中的使用?如果是这样,有没有办法告诉模板我指的是类而不是函数声明?