请考虑以下代码:
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;这样做的方法?