我知道C ++ 11中的using
与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;
};
此处,using
的使用方式有3种。以下行的用途是什么(noise_
是基类的受保护成员):
using Base<T,a>::noise_;
相同于:
using Base<T,a>::getVector;
答案 0 :(得分:7)
简单地说,当基类依赖于模板参数时,将不检查其范围来解析名称。因此,您不能仅使用noise_
来引用Derived
中的noise_
。您应该写this->noise_
,或者用using
来命名。