typename关键字

原址

摘要:

template <class _InputIter, class _Tp>
typename iterator_traits<_InputIter>::difference_type count(_InputIter __first, _InputIter __last, const _Tp& __value) { 
  typename iterator_traits<_InputIter>::difference_type __n = 0;
  for ( ; __first != __last; ++__first)
    if (*__first == __value)
      ++__n;
  return __n;
}

template <class _Iterator>
struct iterator_traits {
  typedef typename _Iterator::iterator_category iterator_category;
  typedef typename _Iterator::value_type      value_type;
  typedef typename _Iterator::difference_type   difference_type;
  typedef typename _Iterator::pointer        pointer;
  typedef typename _Iterator::reference       reference;
};

typedef: 定义新的变量类型,通常考虑代码易用性或代码跨平台时使用。
typename:用在"模板定义/模板实现"中,以标明是类型而不是static对象。


关于typedef关键字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ 中,`typename` 关键字的主要作用是告诉编译器其后面的符号是一个类型名称(type name),而不是一个值(value),以避免编译器的歧义。具体来说,`typename` 关键字可以用于以下两种情况: 1. 在模板中使用嵌套类型时,需要使用 `typename` 关键字来告诉编译器其后面的符号是一个类型名称,而不是一个静态成员变量或函数。 例如,假设有以下的模板类: ``` template <typename T> class MyClass { public: typedef T value_type; ... }; ``` 如果在模板类的成员函数中使用 `value_type`,需要使用 `typename` 关键字告诉编译器其后面的符号是一个类型名称: ``` template <typename T> void MyClass<T>::foo() { typename MyClass<T>::value_type x; // 使用typename关键字 ... } ``` 2. 在使用模板时,需要使用 `typename` 关键字来告诉编译器其后面的符号是一个类型名称,而不是一个静态成员变量或函数。 例如,假设有以下的模板函数: ``` template <typename T> void foo(typename T::value_type x) { ... } ``` 如果在使用该模板函数时,传递的类型 `T` 中有一个名为 `value_type` 的嵌套类型,需要使用 `typename` 关键字告诉编译器其后面的符号是一个类型名称: ``` struct MyStruct { typedef int value_type; }; int main() { MyStruct s; foo<MyStruct>(s); // 使用typename关键字 ... } ``` 总之,`typename` 关键字的作用是告诉编译器其后面的符号是一个类型名称,以避免编译器的歧义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值