0
的所以,我有一類稱爲代表能夠存儲函數指針陣列。這是代碼:陣列的函數指針(包括成員函數)投擲模板特錯誤
template<typename Func>
class delegate
{
private:
public:
typename std::vector<Func> mListOfFunctions;
void Bind(Func f)
{
mListOfFunctions.push_back(f);
}
template<typename...TArgs>
void Invoke(TArgs&&...arg)
{
for (auto f : mListOfFunctions)
{
f(std::forward<TArgs>(arg)...);
}
}
};
用法在Player.cpp:
delegate<void(float)> testDelegate;
testDelegate.Bind(std::bind(&Player::MoveLeft,this));
這引發錯誤C2893(錯誤C2893無法專注函數模板「未知類型的std ::調用(_Callable & & ,_types & & ...)「)
但是,當我更改綁定的定義如下:
template<typename F>
void Bind(F f)
{
}
它工作正常,但是當我試圖函數對象推到載體中再次拋出了同樣的錯誤。 無論如何要解決這個問題嗎?我需要緩存通過的指針
我改成了下面的,它仍然拋出一個錯誤:無效綁定(標準::功能<返回類型(TArgs ...)> F) \t { \t \t mListOfFunctions.push_back(F); \t} –
爲什麼要那樣做?爲什麼你不使用我發佈的代碼? –
我這樣做太:模板 類委託 { 私人: 市民: \t類型名稱的std ::向量<性病::功能> mListOfFunctions; \t空隙綁定(標準::函數 F) \t { \t \t mListOfFunctions.push_back(F); \t} \t模板<類型名... TArgs> \t空隙調用(TArgs && ... ARG) \t { \t \t爲(自動F:mListOfFunctions) \t \t { \t \t \t F(標準::轉發(arg)...); \t \t} \t} };但是當我調用綁定時,它會再次拋出錯誤 –