Я пытаюсь выставить перегруженную функцию с помощью boost :: python. функциональные прототипы:C++ указатели на перегруженные функции
#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);
I'v видел этот ответ: How do I specify a pointer to an overloaded function?
делает это:
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
, что не так и как это исправить?
EDIT Я забыл упомянуть несколько вещей:
- Я использую VS2010 про на Win-7
- записи является функцией членом logical_file
- FMS_logic это пространство имен
спасибо. доза имеет значение, если FMS_logic является пространством имен? – elyashiv
К сожалению, Boost.Python официально не поддерживает функциональные объекты. Хотя функциональные объекты могут работать в большинстве областей, самым безопасным поведением является запись не-членной функции, которая принимает экземпляр и аргументы, а затем вызывает функцию-член. –