在c++模板中::*(作用域op后面的星号)是什么意思?
What does ::* (asterisk after scope op) means in C++ template?
请帮助我理解来自Facebook Pop的代码片段:PopVector.h
模板类Vector2
包含一个静态成员_v
,它看起来像是Vector2
实例的备份数据:
private:
typedef T Vector2<T>::* const _data[2];
static const _data _v;
_v
由以下行实例化:
template<typename T>
const typename Vector2<T>::_data Vector2<T>::_v = { &Vector2<T>::x, &Vector2<T>::y };
则_v
用于实现索引操作符:
const T& operator[](size_t i) const { return this->*_v[i]; }
T& operator[](size_t i) { return this->*_v[i]; }
我不熟悉这个代码模式,有几个问题:
- typepedef行是什么意思?我看不懂
- 为什么
_v
必须是静态成员?它似乎不是跨实例共享的,这并不遵循c++ AFAICT中的静态语义。
Vector2<T>::*
无论在模板中还是在其他地方,::*
都只是一个c++令牌可在上下文中的类型表达式中使用<我> class_name :: *。它声明一个指向成员的指针。我>
在您的示例中,typedef表示_data
是的别名指向Vector2<T>
中具有类型的成员的const指针T const[2]
.
我得到了实际定义错误:_data
是指向T
类型的Vector2<T>
成员的const指针数组[2]的别名。这在实例化中很明显,对象初始化为两个指向成员的指针。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 当我们说在执行程序时将操作系统的控制权传递给main()函数时,我们的意思是什么
- 这句话在c++中的意思是什么
- 这个typedef的意思是什么
- 这句话的意思是什么
- 意思是什么
- 这个句法的意思是什么?