Boost :: python静态方法返回类的实例

时间:2012-08-22 10:53:50

标签: c++ boost-python

以下是我的C++ class

namespace X {
  class ChildFactory: public Father {
  public:
    static ChildFactor* createChildFactory(const properties* ptr = NULLPTR);
  private :
    // no instances allowed
    ChildFactory();
    ChildFactory(const properties* ptr);
    ~ChildFactory();
  };
}; 

以下是我如何定义Boost::Python构造。

BOOST_PYTHON_MODULE(TestPy) 
{
  boost::python::class_<X::ChildFactory, boost::noncopyable>("ChildFactory")
    .def("createChildFactory", &X::ChildFactory::createChildFactory,  boost::python::return_value_policy<boost::python::manage_new_object>() )
    .staticmethod("createChildFactory")
  ;
}

但它给了我奇怪的编译器模板错误。

错误是

destructor could not be generated because a base class destructor is inaccessible

3 个答案:

答案 0 :(得分:1)

尝试将您的课程公开为no_init

class_<Foo, boost::noncopyable>("Foo", no_init);

答案 1 :(得分:0)

destructor could not be generated because a base class destructor is inaccessible

你解决了吗?

如果没有,那意味着你在类的private部分声明了构造函数,这就是无法访问它的原因。实际上你不能实例化那个类,它只能用作单例。

移动你的

ChildFactory();
~ChildFactory();

到公共区域并告诉我们。

答案 2 :(得分:0)

manage_new_object可能会使用auto_ptr<>,需要delete pointer_to_ChildFactory才能使用~ChildFactory()