给定此代码
template <typename T>
typename T::ElementT at (T const &a , T const &b)
{
return a[i] ;
}
做什么
typename T::ElementT
和
a[i]
意思?
最佳答案
typename T::ElementT
由于
T:ElementT
是从属名称,因此这就是为什么在它前面看到关键字typename
的原因。它告诉编译器ElementT
是经过测试的类型,不是值。至于
a[i]
,似乎T
是定义了operator[]
的类,当您编写a[i]
时会调用该类。例如,T
可以是(部分)在此处定义的sample
:class sample
{
public:
typedef int ElementT; //nested type!
//...
ElementT operator[](int i)
{
return m_data[i];
}
ElementT *m_data;
//...
};
现在,如果
T
是sample
,那么您可以编写T::ElementT
以及a[i]
类型的T
。在这种情况下,当T
为样本时,我假设索引i
的类型为int
。