Я реализовал обработку событий с помощью Boost::Signal и Boost::Bind в моем управляемом файле C++. Сослался на ссылку: Boost::bind
Также я создал указатель функции в своем родном файле C++, который передается моему boost::Signal.Connect() как EventHandler в управляемом коде. Код функции, которая передается как указатель функции в моем родном C++
std::string NativeCplus::AddFunctionPointer( std::string message )
{
return message;
}
и выше функция передается как объект boost::function в другой функции NameChangeEvent(), как показано ниже:
void NativeCplus::NameChangeEvent()
{
UnmanagedNameEvent* unmanagedNameEvent=new UnmanagedNameEvent();
boost::function<std::string (std::string)> f;
f=std::bind1st(std::mem_fun(&AlgebraAPI::AddFunctionPointer),this);//FunctionPointer
std::string name="abcd";
unmanagedNameEvent->AddEvent(f,name);
}
В приведенном выше коде я взял boost::function, и указатель функции преобразуется в этот boost::function (f). (ПРАВИЛЬНО ЛИ Я СКАЗАЛ ЭТО?). ), где boost::function(f) передается в AddEvent(f,name), и это AddEvent(f,name) реализуется в мой управляемый файл кода C++. Ниже приведен мой управляемый код С++, который упоминается в собственном проекте С++:
//В моем C++/CLI Wrapper.cpp
declspec(dllexport) void UnmanagedNameEvent::AddEvent(boost::function<std::string (std::string)> f,std::string name)
{
UnmanagedNameEvent* unmanagedNameEvent=new UnmanagedNameEvent();
unmanagedNameEvent->signalEventMessage.connect(f);
//which should be like this.. unmanagedNameEvent->signalEventMessage.connect(bind(NativeCplus::f));
}
ПРОБЛЕМА в том, что я не могу использовать класс NativeCplus для ссылки на его неуправляемую функцию (т.е. f), так как это создаст круговую зависимость файла dll. Любое обходное решение для этого? Все уши для любого более короткого решения!
boost::bind
вместоstd::bind1st
иstd::mem_fun
. - person petersohn   schedule 22.06.2013