2011-10-18 179 views
1

它可能是一個dup問題。但我無法找到答案。 FastDelegate是指:http://www.codeproject.com/KB/cpp/FastDelegate.aspx,但我不認爲它是相關的。C++模板扣除時調用模板函數

我有像下面的代碼,並得到錯誤。

#include <FastDelegate.h> 


using namespace fastdelegate; 

template <typename T> 
T Getter() {} 

template <typename T> 
void Setter(T) {} 

template <typename T> 
class Prop 
{ 
public: 
    typedef FastDelegate0<T> Getter; 
    typedef FastDelegate1<T> Setter; 

    Prop(Getter getter, Setter setter) : 
     m_Getter(getter), m_Setter(setter) 
    { 

    } 

private: 
    Getter m_Getter; 
    Setter m_Setter; 
}; 

template <typename T> 
inline Prop<T>* MakeProp(FastDelegate0<T> getter, FastDelegate1<T> setter) 
{ 
    return new Prop<T>(getter, setter); 
} 

static int Target = 0; 
int main() 
{ 
    FastDelegate0<int> fdGetter(Getter<int>); 
    Prop<int>* c = MakeProp(fdGetter, Setter<int>); // error: no matching function for call to 'MakeProp' 
} 

如果改變了main()到:

int main() 
{ 
    FastDelegate0<int> fdGetter(Getter<int>); 
    FastDelegate1<int> fdSetter(Setter<int>); 
    Prop<int>* c = MakeProp(fdGetter, fdSetter); // It works. 
} 

或:

int main() 
{ 
    FastDelegate0<int> fdGetter(Getter<int>); 
    Prop<int>* c = MakeProp<int>(fdGetter, Setter<int>); // It works, too. 
} 

我認爲,MakeProp()應該得到fdGetter(這是intT,比所謂的FastDelegate1<int>的構造器但它沒有,爲什麼?

P.S.我想在Prop中保存吸氣和吸氣器,對此方法的任何建議都是值得歡迎的。在函數中傳遞參數的過程中複製FastDelegate *的實例也許是不好的。

+1

可能的重複:http://stackoverflow.com/questions/3888082/implicit-conversion-not-happening(你實際上是試圖混合模板演繹與隱式轉換)。 – alexisdm

+0

@alexisdm是的,那正是我想要做的。我認爲編譯器會獲得足夠的信息來進行隱式轉換。謝謝你指出它。 – Logan

回答

0

你試過

Prop<int>* c = MakeProp(FastDelegate0<int>(Getter<int>), FastDelegate1<int>(Setter<int>)); 

Setter<int>無法轉換爲FastDelegate1<T>

+0

是的,我試過了。有用。 – Logan

+0

說實話,我已經從@alexisdm的評論中的「問題」中得到了答案。但是,謝謝你們。 – Logan