C ++避免使用typename ClassName :: template MethodName

时间:2014-06-02 10:08:08

标签: 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 = Base<Data> >
struct Concrete: T {
  typename<class Val>
  void test(){
    ...
    // And now, I have to write "template Concrete: typename"  
    //each time when I want to call some function from parent class
    typename Concrete:: template do_it<Val>();
  }
}

http://coliru.stacked-crooked.com/a/e9fea02d64263042

我理解为什么(因为编译器在编译时可能不确定,do_it到底是什么),但问题是:

这有什么解决方法吗?我的意思是不是每次都写 typename Concrete:template 。起初,我尝试了宏

#define t(Class) typename Class::template

比我只是&#34;前进&#34;父类的函数。写&#34; do_it&#34;函数在Concrete中,调用

 struct Concrete: T {
   ...
 typename<class Val>
 void do_it(){
     typename Concrete:: template do_it<Val>();
 }
   ...
 }

还有更多&#34;对&#34;这样做的方法?

0 个答案:

没有答案