我有以下类声明:
template <typename T, size_t N>
class CircularBuffer {
public:
using iterator = typename std::array<T, N>::iterator;
...
private:
std::array<T, N> m_elements;
...
};
没有&#34; typename&#34;关键字&#34;使用&#34; iterator = typename std :: array :: iterator;&#34;编译器发出错误:
error: need ‘typename’ before ‘std::array<_Tp, _Nm>::iterator’ because ‘std::array<_Tp, _Nm>’ is a dependent scope.
但声明 &#34;使用iterator = std :: array :: iterator;&#34; 编译。
据我了解&#34;使用&#34;仅使用关键字(除了&#34;使用命名空间...&#34;)来创建类型别名,那么为什么需要&#34; typename&#34;在上面的例子中呢? 谢谢!