C++11中关键字using的用例
Use cases of keyword using in 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;
};
这里,using
有3种不同的用法。以下行的目的是什么(noise_
是基 class 的受保护成员):
using Base<T,a>::noise_;
同样适用于:
using Base<T,a>::getVector;
简单地说,当基 class 依赖于模板参数时,不检查其作用域以解析名称。因此,您不能仅使用 noise_
在 Derived
中引用 noise_
。您应该写 this->noise_
,或者用 using
.
介绍名称
我知道 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;
};
这里,using
有3种不同的用法。以下行的目的是什么(noise_
是基 class 的受保护成员):
using Base<T,a>::noise_;
同样适用于:
using Base<T,a>::getVector;
简单地说,当基 class 依赖于模板参数时,不检查其作用域以解析名称。因此,您不能仅使用 noise_
在 Derived
中引用 noise_
。您应该写 this->noise_
,或者用 using
.