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

时间:2019-01-25 15:56:16

标签: c++ c++11 using

我知道C ++ 11中的usingtypedef的行为相同。我有这段代码,发现了不同的用例:

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;
};

此处,using的使用方式有3种。以下行的用途是什么(noise_是基类的受保护成员):

using Base<T,a>::noise_;

相同于:

using Base<T,a>::getVector;

1 个答案:

答案 0 :(得分:7)

简单地说,当基类依赖于模板参数时,将不检查其范围来解析名称。因此,您不能仅使用noise_来引用Derived中的noise_。您应该写this->noise_,或者用using来命名。