0

我在这里阅读了如何FOOBAR在 SWIG 中包装这个宏:

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”中。

4

1 回答 1

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>
于 2013-11-10T05:28:50.983 回答