通過模板類型我有下面的代碼:在f.foo<T>(e);
線error: expected primary-expression before '>'
:無法確定,即使它是在
template <typename T>
struct Data {
struct Embed
{
T t;
};
};
struct Functor {
template <typename T>
void foo(typename Data<T>::Embed & e) {}
};
template <typename T, typename F>
struct Caller
{
F f;
template <typename T>
void invoke() {
typename Data<T>::Embed e;
f.foo<T>(e); //compiler error pointed this line
}
};
然後我專門的模板:
Caller<int, Functor> c;
c.invoke();
編譯器錯誤。看起來編譯器突然不知道T是什麼,即使它是在函數的模板聲明中指定的。
取出指定在foo.invoke(e)
線T
明確將導致could not deduce template parameter 'T'
我該如何解決這個問題? (我仍然想保持調用者可以具有泛型函子的功能,並且函子的函數可以模板化)。
這可能是因爲您正在爲'calller'調用'invoke()'的相同模板名稱。我不認爲這是允許的。 – NathanOliver