我想在模板派生类A
的方法中使用模板基类B
中定义的属性。
到目前为止,我发现using
有效
但是为using
的每个属性编写A
语句都很繁琐
如何避免编写这么多using
语句?
#include <iostream>
using namespace std;
template <typename T>
class A{
public:
A(){
a = 10;
}
//virtual destructor
virtual ~A(){
cout << "~A() is called" << endl;
}
protected:
T a;
} ;
template <typename T>
class B : public A<T>{
public:
void f(void){
cout << a << endl;
}
virtual ~B(){
cout << "~B() is called" << endl;
}
private:
using A<T>::a; //how to get rid of this?
} ;
int main(void){
B<int> bb;
bb.f();
}
答案 0 :(得分:4)
因为您正在扩展依赖于模板参数的类,所以this
将成为依赖名称。您必须明确使用this
:
template <typename T>
struct B : A<T>{
void f(){
std::cout << this->a << std::endl;
}
};
或者您甚至可以指定班级名称:
template <typename T>
struct B : A<T>{
void f(){
std::cout << A<T>::a << std::endl;
}
};
第三种解决方案当然是using
声明。
答案 1 :(得分:2)
// how to get rid of this?
你可以写
void f(void){
cout << A<T>::a << endl;
}
或
void f(void){
cout << this->a << endl;
}
删除using
语句。