std::initializer_list的泛型类型用法

Generic type usage with std::initializer_list

本文关键字:泛型类型 用法 initializer std list      更新时间:2023-10-16

我不明白g++为什么一直抱怨iter?

vector.cpp:42:8:错误:在"std::initializer_list&lt_Tp>::迭代器

这是代码:

template<typename T>
Vector<T>& Vector<T>::operator=(std::initializer_list<T> list)
{
   if ( list.size() > 0 )
   {
       clear();
       for( std::initializer_list<T>::iterator iter = list.begin();
            iter != list.end(); iter++ ) 
       {
           push_back(*iter);
       }
   }
   return *this;
}

亲切问候

您需要向编译器指示std::initializer_list<T>::iterator是一个类型,因为它也可能是一个成员。由于此函数中的编译器不知道T,因此这两种可能性都会导致歧义。

IT必须是typename std::initializer_list<T>::iterator,因为编译器无法判断迭代器是成员还是类型。