我想使用 boost::any 来存储异构函数指针。当我尝试使用 boost::any_cast 重新转换为函数指针时出现异常。
我想做的事甚至被允许吗?
。H:
typedef void(*voidFunction)(void);
struct functionInfo{
CString functionName;
boost::any functionPointer;
};
void foo();
int foo2(int a);
.cpp
void foo()
{
;//do something
}
int foo2(int a)
{
;//do something
}
void main()
{
vector<functionInfo> functionList;
functionInfo myInfo;
myInfo.functionName = _T("foo");
myInfo.functionPointer = &foo;
functionList.push_back(myInfo);
myInfo.functionName = _T("foo2");
myInfo.functionPointer = &foo2;
functionList.push_back(myInfo);
voidFunction myVoidFunction = boost::any_cast<voidFunction>(functionList[0].functionPointer);
}
- - 编辑 - -
好吧,你是对的,它之所以这样,是因为 foo 是一个类成员函数。
意义:
void MyClass::foo();
myInfo.functionPointer = &MyClass::foo;
所以我需要typedef:
typedef void(MyClass::*voidClassFunction)(void);
voidClassFunction myVoidFunction = boost::any_cast<voidClassFunction>(functionList[0].functionPointer);