模板模板参数的“透明度”(缺少模板参数)

时间:2014-03-06 22:05:38

标签: c++ templates

稍微含糊一点,从下面的片段(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

任何想法都非常感激。

1 个答案:

答案 0 :(得分:3)

您所看到的是编译器将>内的f<U>标记解释为不等式运算符。您需要添加.template以让编译器知道您的模板参数。

  void f( int i ) {
    A<T> a;
    a.template f<U>( i );
  }

Live Example

另见Where and why do I have to put the “template” and “typename” keywords?