我正在尝试使用 boost::python 公开重载函数。函数原型是:
#define FMS_lvl2_DLL_API __declspec(dllexport)
void FMS_lvl2_DLL_API write(const char *key, const char* data);
void FMS_lvl2_DLL_API write(string& key, const char* data);
void FMS_lvl2_DLL_API write(int key, const char *data);
我已经看到了这个答案:如何指定指向重载函数的指针?
这样做:
BOOST_PYTHON_MODULE(python_bridge)
{
class_<FMS_logic::logical_file, boost::noncopyable>("logical_file")
.def("write", static_cast<void (*)(const char *, const char *)>( &FMS_logic::logical_file::write))
;
}
结果出现以下错误:
error C2440: 'static_cast' : cannot convert from 'overloaded-function' to 'void (__cdecl *)(const char *,const char *)'
None of the functions with this name in scope match the target type
尝试以下方法:
void (*f)(const char *, const char *) = &FMS_logic::logical_file::write;
结果:
error C2440: 'initializing' : cannot convert from 'overloaded-function' to 'void (__cdecl *)(const char *,const char *)'
None of the functions with this name in scope match the target type
出了什么问题以及如何解决?
编辑 我忘了提几件事:
- 我在win-7上使用vs2010 pro
- write 是logical_file 的成员函数
- FMS_logic 是一个命名空间