稍微含糊一点,从下面的片段(tt.cc)来看,似乎模板模板概念缺少某种“透明度” 。虽然我似乎不知道应该提供A::f()
的其他模板参数(除了模板模板之外),但我可能只是在这里缺少一些平庸。
template <class T>
class A {
public:
template< template<class> class U >
void f( int i ) {
// ...
}
};
template< class T, template<class> class U >
class B {
public:
void f( int i ) {
A<T> a;
a.f<U>( i );
}
};
int main() {
return 0;
}
它提供的错误信息是:
g++ ./tt.cc -o tt
./tt.cc: In member function ‘void B<T, U>::f(int)’:
./tt.cc:17:10: error: missing template arguments before ‘>’ token
a.f<U>( i );
^
Compilation exited abnormally with code 1
任何想法都非常感激。
答案 0 :(得分:3)
您所看到的是编译器将>
内的f<U>
标记解释为不等式运算符。您需要添加.template
以让编译器知道您的模板参数。
void f( int i ) {
A<T> a;
a.template f<U>( i );
}
另见Where and why do I have to put the “template” and “typename” keywords?。