【发布时间】:2012-06-21 00:46:43
【问题描述】:
我想包装 (Facade Pattern) Allegro 对线程的使用,即 install_int_ex(void (__cdecl*)(void), int tick); 和 remove_int(void (__cdecl*)(void)) 我编写的类使用模板和 user-defined Functor Objects 在创建类时安装中断和删除中断销毁。
我不断收到编译器错误:error C2664: 'install_int_ex' : cannot convert parameter 1 from 'void (__thiscall [User-defined FunctorName Here]::* )(void)' to 'void (__cdecl *)(void)' 和 remove_int(void (__cdecl*)(void)) 的类似错误
This seems to work provided the called function accepts pointers to void*user data
不幸的是,Allegro 没有这么灵活。有没有办法绕过这个限制,或者我将不得不使用 Windows 的CreateThread(并在这个过程中学习线程“真正的方式”)?
另请参阅:Using a C++ Member Function as the Thread's Entry-Point-Function
【问题讨论】:
-
您不能将非静态成员函数作为 c 样式函数传递。尝试将函数设为静态。
-
@cppguy:就是这样,我不能。它是用户传入的 FunctorObject。我无法控制它。
-
std::bind(c++11) 或boost::bind( -
@nijansen:我正在使用 VS2010。将在 2011 年结束 Beta 版并发布其第一个 Service Pack。
-
所以
std::bind不是选项,但是boost::bind呢?
标签: c++ c function-pointers allegro