Cython和重载的c++构造函数

2024-10-02 18:14:17 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有标准化(或普遍接受的方法)来解决Cython类在包装C++类时不能超载^ { CD1>}方法的问题?在

有可能使^ {CD1>}取*ARGS和**WARGs包含参数,并在^ {CD1>}范围内选择根据特定模式生成C++实例的方式。然而,这种方法有一些复杂性:

  • 尝试从参数中识别正确的构造函数在某些情况下可能是危险的,除非参数被命名并作为kwargs传递,这可能会给用户带来麻烦。在
  • 当参数没有被__cinit__参数列表中的类型调用时,它们将作为Python对象传递。在我的工作案例中,参数是C++类的Python包装器,试图检索这些实例“TestPtR”是魔鬼从PARthon对象传递到*ARGS或**KARGs的任务。在
  • 使用一系列if。。。伊莱夫。。。否则,从参数组合中选择C++构造函数的情况最终会变得相当混乱。在

所以必须有更好的方法。一种方法是使用类方法(例如,参见:classmethod to overload ^{} behavior in Python)。然而,据我所知(如果我错了请纠正我),CalthMead意味着调用不同于类名的方法,这与用一个类名构造实例的C++方式不太相似。在

有什么想法吗?在


Tags: 对象实例方法参数方式模式情况args
1条回答
网友
1楼 · 发布于 2024-10-02 18:14:17

就个人而言,我会使用类方法。在

WrapperClass.fromSpambar(spambar)

这并不是那么令人费解。如果你不能在C++中重载函数,那么你也需要回退到这个方法。在

如果您可以在初始化时接受一些繁重的操作,您可以实现一个方法,通过定义“模式”或类似的方法来识别构造函数的调用方式。一、 e.args和kwargs的正则表达式。;)

我不认为从Python对象获取thisptr有什么问题。在

^{pr2}$

相关问题 更多 >