【发布时间】:2012-12-01 20:28:41
【问题描述】:
将不同参数的函数指针存储在一个空指针向量中。
unordered_map<string, vector<void*> > List;
template <typename T>
void Listen(string Name, function<void(T)> Function)
{
List[Name].push_back(&Function);
}
然后我想给他们打电话,假设T 与Fire 的类型相同,与Listen 使用的类型相同。
template <typename T>
void Fire(string Name, T Data)
{
auto Functions = List[Name];
for (auto i = Functions.begin(); i != Functions.end(); ++i)
{
(function<void(T)>)i)(Data);
}
}
但我得到一个编译器错误,显示为error C2064: term does not evaluate to a function taking 1 arguments in file ...\vc\include\xrefwrap 431 1。
我做错了什么?
【问题讨论】:
-
你正在推送一个参数的地址。
-
为什么不将
std::function保存在List中? -
@Lol4t0。可悲的是,我无法在同一个列表中保存不同的类型。比如
function<void(int)>、function<void(class*)>和function<void()>都是不同的类型。 -
@chill。既然它是一个空指针向量,那有什么问题?
-
是的,但是在调用它们时你将无法确定函数的类型
标签: c++ function pointers casting std