给定此代码

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;
      //...
};

现在,如果Tsample,那么您可以编写T::ElementT以及a[i]类型的T。在这种情况下,当T为样本时,我假设索引i的类型为int

10-04 14:47