鉴于这种代码帮助在代码模板
template <typename T>
typename T::ElementT at (T const &a , T const &b)
{
return a[i] ;
}
什么
typename T::ElementT
和
a[i]
是什么意思?
鉴于这种代码帮助在代码模板
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
。
我想在那个代码中T总是一个有operator []重载的类并且有一个子类defenition ElementT任何其他没有这两个品质的类都会在编译时产生错误。
typename T::ElementT
这exhaustingly由约翰在this entry到C++ FAQ说明。
a[i]
这种操作通常被称为 “订阅” 并且访问的第i个元素中a
。为此,a
必须是数组或重载订阅运算符的某个类(如std::vector
或std::map
)。但是,正如Nawaz在他的评论中指出的那样,由于a
的类型为T
,并且由于T
预计有嵌套类型ElementAt
,在这种情况下a
不能是数组。
请问你从哪里得到这段代码?这似乎很无用?并且它是否有这些错误(我认为它应该是'const typename T :: ElementT',以及'b'和'i'是什么?)还是你把它们放进去? – sbi 2011-04-02 07:18:58