Effective C++--条款42: 了解typename的双重含义

template<typename C>
void print2nd(const C& container)
{
  if(container.size() >= 2) {
    C::const_iterator iter(container.begin())); //C::iterator 嵌套从属名称
    ++iter ;
    int value = *iter ;
    std::cout << value ;
  }
}
嵌套从属名称默认不是类型,除非在嵌套从属名称加typename
注:typename只会用来嵌套从属属性名称,其它不该有它存在
template<typename C>
void f(const C& container, // 从属名称,不允许使用typename
         typename C::iterator iter); // 嵌套从属名称,一定要使用typename
例外:typename不可出现在base classes list内的嵌套从属类型名称之前,也不可在member initialization list中作为base class修饰符
template<typename T>
class Derived : public Base<T>::Nested{ // base class list中不允许使用typename 即便是嵌套从属属性
public:
    explicit Derived(int x)
    : Base<T>::Nested(x) // mem.init.list 中不允许typename,即便是嵌套从属属性
    {
       typename Base<T>::Nested temp ; // 嵌套从属类型名称,既不在base class list中也不在mem.init.list中,需要加typename
    }
  } ;

例子:
template<typename IterT>
void workWithIterator(IterT iter)
{
  typename std::iterator_traits<IterT>::value_type temp(*iter) ;
}
如果IterT是vector<int>::iterator,temp的类型
就是int,如果IterT是list<string>::iterator,temp的类型就是string
std::iterator_traits<IterT>::value_type 是个嵌套从属名称,因为value_type被嵌套于
iterator_traits<IterT>之内,而IterT是个template参数


typedef简写:
template<typename IterT>
void workWithIterator<Iter iter)
{
    typedef typename
    std::iterator_traits<Iter>::value_type value_type ; // 缩写
    value_type temp(*iter) ;
  }

说明:以上说明的关于嵌套从属属性的typename在不同
       的编译器之间不可移植

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
unity webgl 获得java数据,接口地址,请求方式为post,请求参数为{ "lineid": 27, "areaid": 22, "starttime": "2023-05-07 09:54:22", "endtime": "2023-06-07 09:54:22", "datatype": 1, "pageSize": 5, "pageNumber": 1 },返回结果为{ "returnCode": 0, "returnMessage": "调用成功", "data": { "total": 15, "list": [ { "id": null, "doorinfo": null, "cityname": null, "linename": null, "metrono": null, "doorid": 17414, "doorno": "222222222222222", "typename": null, "type": null, "faultname": "开门障碍物检测3次,开门障碍物检测2次", "sourcename": null, "happentime": "2023-05-29 00:00:00.000", "dealstatus": null, "countryid": 3, "areaid": 22, "lineid": 27, "metroid": 279, "carriageid": 1738, "firstchar": "H" }, { "id": null, "doorinfo": null, "cityname": null, "linename": null, "metrono": null, "doorid": 13456, "doorno": "HHHT0101101", "typename": null, "type": null, "faultname": "输出口0短路故障,输出口0工作异常,数据总线通信故障,门未经许可离开关锁到位位置故障", "sourcename": null, "happentime": "2023-05-29 00:00:00.000", "dealstatus": null, "countryid": 3, "areaid": 22, "lineid": 27, "metroid": 279, "carriageid": 1738, "firstchar": "H" }, { "id": null, "doorinfo": null, "cityname": null, "linename": null, "metrono": null, "doorid": 13608, "doorno": "HHHT0104101", "typename": null, "type": null, "faultname": "SRAM校验异常", "sourcename": null, "happentime": "2023-05-27 20:44:37.000", "dealstatus": null, "countryid": 3, "areaid": 22, "lineid": 27, "metroid": 282, "carriageid": 1756, "firstchar": "H" }, { "id": null, "doorinfo": null, "cityname": null, "linename": null, "metrono": null, "doorid": 13738, "doorno": "HHHT0102503", "typename": null, "type": null, "faultname": "开门障碍物检测2次", "sourcename": null, "happentime": "2023-05-27 16:51:31.000", "dealstatus": null, "countryid": 3, "areaid": 22, "lineid": 27, "metroid": 280, "carriageid": 1748, "firstchar": "H" }, { "id": null, "doorinfo": null, "cityname": null, "linename": null, "metrono": null, "doorid": 13560, "doorno": "HHHT0103101", "typename": null, "type": null, "faultname": "关门时间过长", "sourcename": null, "happentime": "2023-05-27 14:46:56.000", "dealstatus": null, "countryid": 3, "areaid": 22, "lineid": 27, "metroid": 281, "carriageid": 1750, "firstchar": "H" } ], "pageNum": 1, "pageSize": 5, "size": 19, "startRow": 0, "endRow": 18, "pages": 1, "prePage": 0, "nextPage": 0, "isFirstPage": true, "isLastPage": true, "hasPreviousPage": false, "hasNextPage": false, "navigatePages": 8, "navigatepageNums": [ 1, 2, 3 ], "navigateFirstPage": 1, "navigateLastPage": 1 },想单独获得"doorno"、"faultname"和"happentime"数据,在unity webgl中文本框显示出来的代码怎么写
最新发布
06-09

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值