c++ - 不清楚的 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, member4;
};

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

到目前为止我的笔记:

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

最佳答案

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

关于c++ - 不清楚的 typedef 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9804737/

相关文章:

c++ - 如何在C语言中检测环绕计数器和大负值之间的区别

c++ - 为什么在匿名命名空间中定义模板时出现内部链接错误?

有人可以解释这个 'typedef' 的含义吗?

c - C 中的 typedef 和指向函数的指针

c++ - 如何使用 void 指针生成二维动态数组?

c# - 无法将 thrift c# 客户端连接到 python 服务器

c++ - 委托(delegate)给另一个对象的运算符(operator)->

c++17 有效地将参数包参数与 std::array 元素相乘

c - c中的typedef和#define是一样的吗?

c++ - GCC 4.2.x 是否创建构造函数?