std::initializer_list的泛型类型用法
Generic type usage with std::initializer_list
我不明白g++为什么一直抱怨iter?
vector.cpp:42:8:错误:在"std::initializer_list<_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
,因为编译器无法判断迭代器是成员还是类型。
相关文章:
- 使用泛型类型推送到堆栈时出现问题
- 如何在容器中指定模板化别名的泛型类型
- 具有模板专用化的泛型类型转换
- C++存储泛型 T 类型类的向量
- 如何在C++中返回没有模板的泛型类型?
- 如何在带有约束 (C++) 的函数中使用泛型类型
- 模板函数重载(泛型类型与模板模板类型)选择正确的重载
- 泛型类型别名,它们彼此不兼容
- 泛型类型转换
- 重载泛型类型的模板类时检查运算符=时的自赋值
- 在C++中,如何根据类中的参数返回不同的泛型类型
- C++错误 C2227:'->looseHealth'左侧必须指向类/结构/联合/泛型类型
- 使用泛型类型显式实例化函数模板
- 函数模板中的无效转换错误,返回值取决于其泛型类型
- 如何确保 "<<" 运算符适用于模板化 ADT 定义中的任何泛型类型?
- 仅当泛型类型的值是指针时,才删除该值
- 错误c++visual studio c2227左侧'->;Init';必须指向类/结构/联合/泛型类型
- 用于泛型类型上的泛型操作的SFINAE
- 为什么可以强制转换的泛型类型不会被隐式转换
- std::initializer_list的泛型类型用法