在模板声明后面使用typename关键字

时间:2015-10-06 16:17:16

标签: c++ templates

当我阅读source code时,有些事情让我很困惑

template<typename T> inline typename NumTraits<T>::Real ei_real(const T& x) { return numext::real(x); }
template<typename T> inline typename NumTraits<T>::Real ei_imag(const T& x) { return numext::imag(x); }
template<typename T> inline T ei_conj(const T& x) { return numext::conj(x); }

然后我在c ++源代码中读到了其他内容

template<typename _Tp>
inline typename
__gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type
__fill_a(_Tp* __first, _Tp* __last, const _Tp& __c)
{
  const _Tp __tmp = __c;
  __builtin_memset(__first, static_cast<unsigned char>(__tmp),
           __last - __first);
}

此函数使用memset初始化向量

现在有两个问题:
1.为什么要使用类型名称typename NumTraits<T>::这是什么意思? 2.解释typename __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type,它太长而难以理解。

任何帮助将不胜感激!

0 个答案:

没有答案