【发布时间】:2021-11-15 18:03:25
【问题描述】:
我在say.hpp 中有以下 C++ 函数:
#include <iostream>
void say(const char* text, const uint32_t x = 16, const uint32_t y = 24, const int32_t z = -1) {
std::cout << text << std::endl;
}
这是我的say.i:
%module say
%{
#include "say.hpp"
%}
%include "say.hpp"
然后,我构建了共享库:
$ swig -python -c++ -I/usr/include say.i
$ g++ -fPIC -c say_wrap.cxx -I/opt/rh/rh-python38/root/usr/include/python3.8
$ g++ -shared say_wrap.o -o _say.so
然后,我尝试调用它:
>>> import say
>>> say.say("hello")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/hc/test/cpp/say.py", line 66, in say
return _say.say(text, x, y, z)
TypeError: Wrong number or type of arguments for overloaded function 'say'.
Possible C/C++ prototypes are:
say(char const *,uint32_t const,uint32_t const,int32_t const)
say(char const *,uint32_t const,uint32_t const)
say(char const *,uint32_t const)
say(char const *)
>>>
函数参数的默认值似乎有问题,因为一旦我删除它们,它就会起作用。
有什么想法吗?
【问题讨论】:
-
你展示的C++代码,是
say.hpp文件的内容吗? -
是的,我只是尽量保持简单,将所有内容都放在标题中。
-
您能否验证重载方法是否正确生成(- 如here 所述)
-
您是否尝试过使用“compactdefaultargs”功能标志?
-
@ttuna 我该如何验证?我查看了生成的python文件
say.py,我只看到一个定义——def say(text, x=16, y=24, z=-1):
标签: c++ python-3.x linux g++ swig