如何使用SWIG包装C ++无参数宏?

时间:2013-11-08 04:25:43

标签: swig

我在这里阅读了如何在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”中。

1 个答案:

答案 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>