我知道using在C++ 11中的行为与...相同typedef.我有这个代码,发现了不同的用例:
template<typename T, int a>
class Base
{
public:
std::vector<T> noise_(a);
using VectorType = std::vector<T>;
virtual VectorType getVector() const
{
return noise_;
}
protected:
VectorType noise_;
};
template<typename T, int a>
class Derived : public Base<T,a>
{
public:
using Base<T,a>::noise_;
using VectorType = typename Base<T,a>::VectorType;
using Base<T,a>::getVector;
};
Run Code Online (Sandbox Code Playgroud)
这里,using以3种不同的方式使用.以下行的目的是什么(noise_是基类的受保护成员):
using Base<T,a>::noise_;
Run Code Online (Sandbox Code Playgroud)
同样的:
using Base<T,a>::getVector;
Run Code Online (Sandbox Code Playgroud)
简而言之,当基类依赖于模板参数时,不会检查其范围以解析名称.因此,你不能指noise_在Derived仅使用noise_.您应该编写this->noise_,或者引入名称using.
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |