2

以下是我的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
4

3 回答 3

1

尝试将您的班级公开为no_init

class_<Foo, boost::noncopyable>("Foo", no_init);
于 2012-08-28T07:58:11.027 回答
0

manage_new_object可能会使用auto_ptr<>which requires delete pointer_to_ChildFactoryto work which requires access to ~ChildFactory()

于 2012-08-28T08:08:09.617 回答
0

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

那你解决了吗?

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

移动你的

ChildFactory();
~ChildFactory();

到公共部分,让我们知道。

于 2012-08-28T03:07:06.297 回答