有没有办法从python类生成一个相对干净的c++类并在编译时绑定它?在
例如,如果我有这个python类:
class CarDef:
acceleration = 1000.0
brake = 1500.0
inertia = acceleration * 0.1 * brake
def __init__(self):
pass
我想要相应的c++类:
^{pr2}$生成的c++类和原始的python类可能不同:我可以使用“getter方法”范式而不是类属性。在
我试图实现的是用python创建资源文件,以便在c++应用程序中使用。目标是尽可能减少最终用户添加和使用参数所需的代码量;并且必须避免在“运行阶段”(在“初始化阶段”允许这样做)期间进行字符串比较。在
我希望用户只需输入两次资源名称:一次是在python类中,一次是在c++中将要使用资源的地方,假设“魔力”将绑定这两个项(要么在运行时(我怀疑没有字符串比较就可以做到这一点),要么在编译时(中间步骤在编译项目之前生成c++类)。这就是为什么我要从python转到c++;我相信从c++到python至少需要两个python文件:一个是生成的,一个是从后者继承的(以避免覆盖已经指定的资源)。在
最终用户的用途如下:
// A singleton definition manager
class DefManager
{
CarDef mCarDef;
public:
static DefManager& GetReference()
{
static DefManager instance;
return instance;
}
CarDef& getCarDef() { return mCarDef; }
};
// One would use the generated CarDef class like this:
mCar.setSpeed( mCar.getSpeed() + DefManager.GetReference().getCarDef().acceleration );
考虑到这一点,python代码完全在c++代码之外。在
我看到的一个明显的问题是如何知道python属性或方法返回的类型。我看到了一些例子,太好了!,但我还没有看到任何能满足我需要的例子。另外,在编译时,c生成的代码似乎仍然需要Python.h和cpythonapi库。在
我有什么办法可以做到这一点吗?有更好的方法吗?在
您可以在C++代码中使用{a1}python,反之亦然。有很多助手函数,虽然有点难看,但功能非常强大,可能能够完成您想要的,尽管我不确定我是否完全理解您的问题。这不需要cythonapi,但仍然需要Python.h
请注意,异常处理有一些限制。您可以设置让您的Python代码抛出C++异常,但是异常类型可能在翻译中丢失。您还需要注意对引用计数对象的处理。SWIG将为Python生成引用计数,这有时会意外地生成
delete
对象。在如果你不喜欢使用一个工具,比如SWIG,那么C++也有{a2}。同样,这是Python绑定的C++,不从Python自动生成C++。在
按照你的要求去做是有逻辑问题的。
Python是弱类型的。
在python中,甚至可以在运行时更改某个数据成员的类型。
假设你有两个类型的对象
我们把它们称为
^{pr2}$obj1
和obj2
。 假设你有一个setter:假设你也有一个setter:
那么C++中的成员X有什么类型呢?
这只能在运行时决定,并且一个Python类可能需要一个以上的C++类。 不过,从python中创建一个模板类是可能的,而且实际上非常有趣。
另外,一个通用的解决方案可能是不可能的,但如果您假设没有成员具有不明确的类型,这是可能的。在
相关问题 更多 >
编程相关推荐