【发布时间】:2012-02-03 08:43:19
【问题描述】:
我在某个库中有这个功能:
class myConsole
{
void addCommand( std::string command, void* fn );
...
}
在我的课堂上我有这个功能:
void myApp::TestFn( const std::vector<std::string> & args )
{
// do something
}
在同一个班级我称之为:
void myApp::initApp( )
{
myConsole::getSingleton( ).addCommand( "FirstTest", &myApp::TestFn );
}
但这给了我这个错误:
错误 c2664 无法将参数 2 从 'void(__thiscall myApp::*)(const std::vector<_ty>&)' 到 'void *'
我该如何解决这个问题?
提前致谢!
【问题讨论】:
-
之后你打算如何使用
void* fn? -
myApp::TestFn是否访问myApp的任何成员变量? -
你应该看看 Functors,例如stackoverflow.com/questions/356950/c-functors-and-their-uses
-
你有控制myConsole的声明,还是别人的库?要么将其更改为接受指向对象的指针和指向成员函数的指针,要么是仿函数,要么是指向全局函数的指针和指向任意“状态”的指针(可以只调用类指针的成员函数)作为州通过)。如果不是,您将必须 (a) 接受如果它假定函数指针和 void* 是可互换的(这适用于许多计算机/操作系统,但不是全部)并且 (b) 接受您需要一个命令函数将始终使用的全局对象。
标签: c++ visual-c++ function-pointers void-pointers