说我有以下课程:
template <class T>
class Base {
protected:
T theT;
// ...
};
class Derived : protected Base <int>, protected Base <float> {
protected:
// ...
using theInt = Base<int>::theT; // How do I accomplish this??
using theFloat = Base<float>::theT; // How do I accomplish this??
};
在我的派生类中,我想使用更直观的名称来引用Base::theT
,这在Derived类中更有意义。我正在使用GCC 4.7,它具有很好的C ++ 11功能。有没有办法使用using
语句来实现我在上面的例子中尝试的这种方式?我知道在C ++ 11中,using
关键字可用于别名类型以及例如。将受保护的基类成员带入公共范围。是否存在任何类似的成员别名机制?
答案 0 :(得分:7)
Xeo的提示奏效了。如果您使用的是C ++ 11,则可以像这样声明别名:
int &theInt = Base<int>::theT;
float &theFloat = Base<float>::theT;
如果您没有C ++ 11,我认为您也可以在构造函数中初始化它们:
int &theInt;
float &theFloat;
// ...
Derived() : theInt(Base<int>::theT), theFloat(Base<float>::theT) {
theInt = // some default
theFloat = // some default
}
编辑: 轻微的烦恼是你不能初始化那些别名成员的值,直到构造函数的主体(即花括号内)。