在C++ 11中使用关键字的用例

Ton*_*ker 3 c++ using c++11

我知道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)

Evg*_*Evg 7

简而言之,当基类依赖于模板参数时,不会检查其范围以解析名称.因此,你不能指noise_Derived仅使用noise_.您应该编写this->noise_,或者引入名称using.