当我阅读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
,它太长而难以理解。
任何帮助将不胜感激!