我可以处理移植平台相关的功能。我有一个问题,我在 Linux(clang 和 g++)上尝试的编译器不接受以下代码,而 msvc++ 编译器接受:
template <class T>
class Base {
protected:
T Value;
};
template <class T>
class Derived : public Base<T> {
public:
void setValue(const T& inValue){
Value = inValue;
}
};
int main(int argc, char const *argv[])
{
Derived<int> tmp;
tmp.setValue(0);
return 0;
}
g++ 错误:
main.cpp: In member function ‘void Derived<T>::setValue(const T&)’:
main.cpp:11:3: error: ‘Value’ was not declared in this scope
Value
我相信这是由于在第二类中使用了非依赖名称( )。更多信息。
问题是我有一个非常大的代码库,其中经常使用这种类型的代码。我知道在查看标准时这是错误的。this->
但是,不必Base<T>::
在每次使用Value
. using Base<T>::Value;
当您使用大约 20 个基类成员时,即使在派生类的开头编写也是有问题的。
所以我的问题是:是否有适用于 Linux 的编译器允许这种代码(有或没有额外的编译器开关)?或者是否有一些小的修改可以让这段代码在 Linux 上编译?