考虑:
template <typename T>
class Base
{
public:
static const bool ZEROFILL = true;
static const bool NO_ZEROFILL = false;
}
template <typename T>
class Derived : public Base<T>
{
public:
Derived( bool initZero = NO_ZEROFILL ); // NO_ZEROFILL is not visible
~Derived();
}
我无法使用GCC g++ 3.4.4 (cygwin)进行编译。
在将它们转换为类模板之前,它们不是泛型的,派生类能够看到基类的静态成员。这种可见性的丧失是否符合C++规范要求,还是需要采用某种语法更改?
我知道每个Base<T>实例都有自己的静态成员"ZEROFILL
"和"NO_ZEROFILL
", Base<float>::ZEROFILL
和Base<double>::ZEROFILL
是不同的变量,但我并不关心;这个常量存在是为了增加代码的可读性。我想使用一个静态常量,因为这比宏或全局变量更安全,可以避免名称冲突。
Base<T>::NO_ZEROFILL
,2)使用前缀this->NO_ZEROFILL
,3)添加语句using Base<T>::NO_ZEROFILL
,4)使用启用宽容模式的全局编译器开关。这些解决方案的优缺点在https://dev59.com/Eek5XIcBkEYKwwoY7eQE中有描述。 - George Robinson