它可能是一個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(這是int
的T
,比所謂的FastDelegate1<int>
的構造器但它沒有,爲什麼?
P.S.我想在Prop
中保存吸氣和吸氣器,對此方法的任何建議都是值得歡迎的。在函數中傳遞參數的過程中複製FastDelegate *的實例也許是不好的。
可能的重複:http://stackoverflow.com/questions/3888082/implicit-conversion-not-happening(你實際上是試圖混合模板演繹與隱式轉換)。 – alexisdm
@alexisdm是的,那正是我想要做的。我認爲編譯器會獲得足夠的信息來進行隱式轉換。謝謝你指出它。 – Logan