我在这里阅读了如何在SWIG中包装此宏FOOBAR
:
class foobar {
public:
static void method() {}
};
#define FOOBAR() foobar().method()
解决方案是将其包含在SWIG界面中:
void FOOBAR();
但是,假设我放弃()
以便我的宏
#define FOOBAR foobar().method()
这仍然是我可以在C ++中使用的完全合法的宏。我怎么包装这个,所以我可以在Python命令行上说:
>>>FOOBAR
澄清一下,因为这似乎令人困惑。我故意选择该方法不返回任何内容。我这样做了,所以不考虑“它应该归还什么”这个无关紧要的问题。然而,人们似乎仍然想要考虑它。
那么,在C ++中,FOOBAR
有意义 - 它是某个对象,我可以调用FOOBAR.someMethod()
。我希望在Python命令行上,它也是一个对象(等效的),它的行为相同,我也想调用FOOBAR.someMethod()
并使其行为与C ++中的行为相同。
我很抱歉,但我认为,在SWIG的上下文中,上述解释是显而易见且不必要的,并且包含在缩写“wrap”中。
答案 0 :(得分:1)
%pythoncode
可能就是您想要的。例如:
%module x
%inline %{
class foobar {
public:
static void method() {}
};
#define FOOBAR foobar().method()
%}
%pythoncode %{
FOOBAR = foobar().method
%}
结果:
>>> from x import *
>>> FOOBAR
<built-in function foobar_method>