不清楚typedef类型

时间:2012-03-21 12:37:14

标签: c++ templates typedef

我遇到了这段代码,并想知道这意味着什么。 但即使在看了15分钟之后,对我来说也没有意义。

template< typename T >
struct Vector4 {
    typedef T Vector4<T>::* const vec[4];
    static const vec constVec;

    //just to have some member instances of T
    T member1, member2, member3, member4;
};

那么constVec的类型是什么? 请不要只重复typedef,而是用通用语言解释。

到目前为止我的笔记:

  • 为什么有两种类型(TVector4<T>),这是一个函数指针吗?
  • :: *是什么意思?从Vector4的范围中获取所有内容?
  • 它是一个const指针数组吗?但为什么:: then?

1 个答案:

答案 0 :(得分:10)

constVec是一个包含Vector4<T>类成员的4个常量指针的数组,类型为T

注意:成员不是常数,指针本身就是。

首先,由于这些是常量指针,您需要在构造函数中初始化它们:(我刚刚注意到static限定符,因此必须在类外部初始化它,但如果不是静态,您需要在初始化列表中执行此操作。)

template< typename T >
struct Vector4 {
    typedef T Vector4<T>::* const vec[4];
    static const vec constVec;

    //just to have some member instances of T
    T member1, member2, member3, member4;

};

template<typename T>
const typename Vector4<T>::vec Vector4<T>::constVec = {&Vector4::member1,&Vector4::member2,&Vector4::member3,&Vector4::member4};

int main() {
    Vector4<int> v;
    for(int i=0; i<4; i++) {
        (v.*Vector4<int>::constVec[i]) = 5;
    }
return 0;
}