在我的特定问题中,有一个依赖类的继承,即:
template<typename type>
struct Base{
int a;
}
template<typename type>
struct Derived: Base<type>{
void func(int b){
Base<type>::a = b
}
}
在此示例中,我必须使用Base<type>::a
来访问变量,因为Base<type>
依赖于模板参数type
。但这很烦人,每次我们都要添加前缀Base<type>::
。
另一种解决方法是:
template<typename type>
struct Derived: Base<type>{
using Base<type>::a;
void func(int b){
a = b
}
}
但是,它仍然很烦人,因为我们必须重复使用的每个数据成员。有没有办法将母类的整个范围导入其派生类?
答案 0 :(得分:2)
您可以使用this
来避免指定完整的基类范围
void func(int b){
this->a = b;
}
此类型的键入较少,并且在将来进行重命名和重构时更易于处理。
查看有效的example。
您可以实现的最短前缀是三个字母:
template<typename type>
struct Derived: Base<type>{
using B = Base<type>;
void func(int b){
B::a = b;
}
};