存儲函數指針在void指針向量中具有不同參數。將void *轉換爲std :: function <void()>
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
。
我在做什麼錯?
您正在推送參數的地址。 – chill
爲什麼不把'std :: function'保存在'List'中? – Lol4t0
@ Lol4t0。可悲的是我無法在同一個列表中保存不同的類型。例如'function','function '和'function '都是不同的類型。 –
danijar