我看到这段代码,想知道它是什么意思。 但即使看了大约 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,而是用通用语言解释。
到目前为止我的笔记:
- 为什么有两种类型(
T
和Vector4<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/