动态调用静态;建造商;在C++; 我试图编写一个Python包装器,它的封闭源代码C++库有这样的接口: class Image { public: : static Image ReadImage(const char *Filename); : }

动态调用静态;建造商;在C++; 我试图编写一个Python包装器,它的封闭源代码C++库有这样的接口: class Image { public: : static Image ReadImage(const char *Filename); : },c++,static-methods,C++,Static Methods,问题是,对于python绑定,我需要指向图像对象的指针,而不是对象图像本身。如果该方法是构造函数,我只需执行以下操作: Image img = new Image(); 但我一直在想静态方法是否有相应的语法。我尝试了以下不起作用的方法(至少在g++4.8中不起作用): 当然,我可以通过生成包装器类来解决这个问题,但我想知道这是否真的是必要的?您可能需要依赖复制ctor或移动ctor: Image* img = new Image(Image::ReadImage("foo.bar")); (

问题是,对于python绑定,我需要指向
图像
对象的指针,而不是对象
图像
本身。如果该方法是构造函数,我只需执行以下操作:

Image img = new Image();
但我一直在想静态方法是否有相应的语法。我尝试了以下不起作用的方法(至少在g++4.8中不起作用):


当然,我可以通过生成包装器类来解决这个问题,但我想知道这是否真的是必要的?

您可能需要依赖复制ctor或移动ctor:

Image* img = new Image(Image::ReadImage("foo.bar"));

(如果需要动态存储持续时间;可能将其放在映射或堆栈中就足够了。)(如果需要动态存储持续时间,请使用
std::unique_ptr
,否则您的代码将异常不安全且无法维护。)谢谢,Daniel!幸运的是,有一个工作的副本构造函数,所以你的构造工作了。我将接受这一回答,但如果没有复制构造函数,它将不起作用。@DyP我试图避免对需要满足此Python绑定的API做出假设,因为该绑定可能会接管所有权。@DanielFrey我的评论并不总是指批评。您的答案非常简短,因此我想补充一点,这不是唯一的解决方案:)我担心您需要一个python类方法ReadImage
Image* img = new Image(Image::ReadImage("foo.bar"));