C++ C++;避免typename类名称::模板方法名称

C++ C++;避免typename类名称::模板方法名称,c++,templates,C++,Templates,考虑以下代码: template <class T> struct Base{ typename<class Val> void do_it{ ... } } struct Concrete: Base<Data>{ void test(){ ... do_it<Val>(); // It is ok with concrete class implementation }

考虑以下代码:

template <class T>
struct Base{
   typename<class Val>
   void do_it{
     ...
   }
}

struct Concrete: Base<Data>{      
  void test(){
    ...
    do_it<Val>();      // It is ok with concrete class implementation
  }
}
而我只是从父类“转发”函数。在混凝土中编写“do_it”函数,该函数调用

 struct Concrete: T {
   ...
 typename<class Val>
 void do_it(){
     typename Concrete:: template do_it<Val>();
 }
   ...
 }
struct混凝土:T{
...
类别名
void do_it(){
typename Concrete::template do_it();
}
...
}

还有其他“正确”的方法吗?

并不是“编译器不确定”。这是因为语言是这么说的。@Kerek SB so,有一些编译器特定的键不允许写“typename模板”?我是说,如果你知道的话。我必须这样写,只是因为standart这么说。@tower120这不是一个有效的例子,因为您的模板类没有在其中实例化。证明:请注意,只要模板参数可以从参数中派生出来,问题就完全消失了,例如,如果您有
模板,请执行它(const Val&value)
#define t(Class) typename Class::template
 struct Concrete: T {
   ...
 typename<class Val>
 void do_it(){
     typename Concrete:: template do_it<Val>();
 }
   ...
 }