Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 返回类实例的python静态方法_C++_Boost Python - Fatal编程技术网

C++ 返回类实例的python静态方法

C++ 返回类实例的python静态方法,c++,boost-python,C++,Boost Python,下面是我的C++类 namespace X { class ChildFactory: public Father { public: static ChildFactor* createChildFactory(const properties* ptr = NULLPTR); private : // no instances allowed ChildFactory(); ChildFactory(const properties* ptr);

下面是我的
C++类

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")
  ;
}

无法生成析构函数,因为基类析构函数不可访问

你解决了吗

如果不是,这意味着你在类的
private
部分声明了构造函数,这就是为什么不能访问它。事实上,您不能实例化该类,它只能用作单例

移动你的

ChildFactory();
~ChildFactory();

向公共部分公开,并让我们知道。

尝试将您的类公开为具有
no_init

class_<Foo, boost::noncopyable>("Foo", no_init);
class_uuo(“Foo”,没有初始化);

管理新对象
可能会使用
自动ptr
,这需要
删除指向子工厂的指针
,才能进行需要访问
~ChildFactory()
的工作

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