我可以处理移植平台相关的功能.我有一个问题,我在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;
}
Run Code Online (Sandbox Code Playgroud)
g ++错误:
main.cpp: In member function ‘void Derived<T>::setValue(const T&)’:
main.cpp:11:3: error: ‘Value’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
我相信这是由于Value在第二类中使用了非依赖名称().更多信息.
问题是我有一个非常大的代码库,其中经常使用这种类型的代码.我明白看标准时错了.然而,不必写this->或Base<T>::在每次使用前都非常方便Value.using Base<T>::Value;当你使用~20个基类成员时,即使在派生类的开头写作也是有问题的.
所以我的问题是:是否有适用于Linux的编译器允许这种代码(有或没有额外的编译器开关)?或者是否有一些小修改可以让这些代码在Linux上编译?
你必须说this->Value或Base<T>::Value,因为Value是一个从属名称.或者,添加using Base<T>::Value;到派生类定义中.没有办法解决这个问题.
微软的编译器只是不合标准的,我很害怕编写一个供应商的风格,而不是发布的C++标准.
| 归档时间: |
|
| 查看次数: |
311 次 |
| 最近记录: |