【发布时间】:2019-01-25 15:56:15
【问题描述】:
我知道 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;
【问题讨论】:
-
如果您想了解语言功能,cppreference 是一个非常好的参考:en.cppreference.com/w/cpp/language/using_declaration
-
using和typedef之间有一个显着区别:alias templates 只能使用前者。