Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不清楚的类型定义类型_C++_Templates_Typedef - Fatal编程技术网

C++ 不清楚的类型定义类型

C++ 不清楚的类型定义类型,c++,templates,typedef,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,

我偶然发现了这个代码,想知道它是什么意思。 但即使在看了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;
};
模板
结构向量4{
typedef T Vector4::*常量向量[4];
静态常数vec constVec;
//只是为了有一些T的成员实例
T成员1、成员2、成员3、成员4;
};
那么consvec的类型是什么呢? 请不要只是重复typedef,而是用公共语言进行解释

我目前的笔记:

  • 为什么有两种类型(
    T
    Vector4
    ),这是函数指针吗
  • ::*是什么意思?从Vector4的范围内获取所有信息
  • 它是常量指针数组吗?但是为什么会这样呢

constVec
是一个由4个常量指针组成的数组,指向
Vector4
类的
T

注意:成员不是常量,指针本身是常量

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

模板
结构向量4{
typedef T Vector4::*常量向量[4];
静态常数vec constVec;
//只是为了有一些T的成员实例
T成员1、成员2、成员3、成员4;
};
模板
const typename Vector4::vec Vector4::constVec={&Vector4::member1,&Vector4::member2,&Vector4::member3,&Vector4::member4};
int main(){
矢量4V;

对于(int i=0;i@EddyPronk:很高兴知道这些人是从哪里得到的^^^虽然我的来源不是从那里(但似乎受到了很大的启发)我在我的问题中添加了一个类型为T的成员。你介意添加一些代码吗,这表明
vec
与成员一起使用吗?因此,这个示例的寓意是,你可以遍历成员。+1非常好。感谢你的解释和示例。
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;
}