模板中的嵌套类型名
Nested typenames in templates
本文关键字:嵌套类型 更新时间:2023-10-16
我想写一个这样的函数模板:
template< typename L<T> > // does not work
void do_sth(L<T>& list){
T value = 0;
list.push_back(value);
}
这意味着,在模板中,我想使用提供"push_back"的容器,但也要使用存储在该容器中的类型。
一个变通方法是
template< typename T >
void do_sth(typename std::list<T>& list){
T value = 0;
list.push_back(value);
}
// call
std::list<double> list;
do_sth<double>(list);
这是多余的,因为a)我在声明"list"时已经指定了"double", b)该函数不能与std::vector一起工作,尽管实现将完全适合。
有谁知道如何做到这一点吗?
这是STL容器提供value_type
类型定义的原因之一:
template< typename Container >
void do_sth(Container& list){
typename Container::value_type value = 0;
list.push_back(value);
}
由于模板参数推导,您的解决方案也可以使用对do_sth(list);
的普通调用。
你可以这样做:
template< typename T >
void do_sth( T & list){
typename T::value_type value = 0;
list.push_back(value);
}
相关文章:
- CRTP:为什么获得嵌套类型和派生类的嵌套方法有区别
- 为什么在VS2015中模板相关的嵌套类型名称中不需要typename关键字?
- 为什么嵌套类型的基类不需要"typename"?
- 如何在C++中的另一个模板函数中使用属于模板化类的嵌套类型?
- 保持嵌套类型的挥发性
- 具有嵌套类型的类的概念
- 将嵌套类型的类分开为标题和源
- 如何解决C++嵌套类型的循环依赖关系
- 在 C++11 中,从私有嵌套类型继承是否合法?
- C++ 递归嵌套类型和名称注入
- 如何定义一个模板类函数,该函数在类外的签名中具有嵌套类型的模板参数
- 访问模板参数T的嵌套类型,即使T是指针
- 为什么reverse_iterator双重定义其嵌套类型
- 嵌套类型:结构与类
- 如何对嵌套类型执行部分模板专用化
- 如何解析可选的嵌套类型,如 std::allocator_traits
- 模板和嵌套类型查找
- 在 c++ 中显示嵌套类型定义的最基本类型声明
- 无法推断出嵌套类型的模板函数
- C++使用别名访问嵌套类型(使用 vs typedef)