:: *(作用域运算符后的星号)在C ++模板中是什么意思?

铜匠赫克托

请帮助我了解来自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]; }

我对这种代码模式不熟悉,对此有一些疑问:

  1. typedef行是什么意思?我不明白Vector2<T>::*
  2. 为什么_v必须成为静态成员?似乎它没有在实例之间共享,在C ++ AFAICT中不遵循静态语义。
詹姆斯·坎泽

无论是在模板中还是在其他地方,::*都是C ++令牌,仅在上下文class_name :: *中用于类型表达式中它声明一个指向成员的指针。

在您的情况下,typedef表示这_data是指向其成员Vector2<T>具有type的const指针的别名T const[2]

编辑:

我得到的实际定义有误:_data是指向Vector2<T>type成员的const指针的array [2]的别名T这在实例化中很明显,在该实例化中,使用两个指向成员的指针来初始化对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Lisp文档模板中的星号是什么意思?

来自分类Dev

这个“ >> =”运算符在C中是什么意思?

来自分类Dev

C#中的“ <<”运算符是什么意思

来自分类Dev

模板类型后的星号“*”是什么意思?

来自分类Dev

Cypher中的这个运算符(=〜)是什么意思?

来自分类Dev

这些运算符在Elixir中是什么意思?〜>>,<<〜

来自分类Dev

JavaScript中的'/ ='运算符是什么意思?

来自分类Dev

。'*运算符在Matlab中是什么意思?

来自分类Dev

Haskell中的/ =运算符是什么意思?

来自分类Dev

//运算符在Julia中是什么意思?

来自分类Dev

=> 运算符在 Swift 中是什么意思?

来自分类Dev

这个运算符`=>`在verilog中是什么意思

来自分类Dev

“&^”运算符是什么意思?

来自分类Dev

<>运算符是什么意思

来自分类Dev

运算符?=是什么意思?

来自分类Dev

&运算符是什么意思?

来自分类Dev

运算符?=是什么意思?

来自分类Dev

A *算法中的星号是什么意思?

来自分类Dev

[&]在C ++中是什么意思

来自分类Dev

**在C中是什么意思?

来自分类Dev

C中的“流”是什么意思?

来自分类Dev

**在C ++中是什么意思?

来自分类Dev

C ++中的代码是什么意思?

来自分类Dev

(void)在c ++中是什么意思?

来自分类Dev

*(int *)在C ++中是什么意思?

来自分类Dev

C中的“ a ## b”是什么意思?

来自分类Dev

^在C ++中是什么意思?

来自分类Dev

:在C中是什么意思?

来自分类Dev

在C中,“&”号是什么意思?