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>();
}
...
}