【发布时间】:2013-04-06 15:12:39
【问题描述】:
我正在阅读我正在阅读的书中的 C++ 类模板,虽然大部分内容都很清楚,但这个特殊的功能真的让我很烦:
template <typename T>
struct Vector3 {
T x; T y; T z;
//... several methods, constructors, etc
//Then this one, which is really confusing me:
template <typename P>
P* Write(P* pData)
{
Vector3<T>* pVector = (Vector3<T>*) pData;
*pVector++ = *this;
return (P*) pVector;
}
首先,该函数似乎将 P 的数组或指向 P 的指针视为可以轻松地从指向 Vector3 的指针转换为类名。怎么样?如果我有一个Vector3<float> someVector,是什么让指向这个someVector 的指针变成指向float 的指针? (甚至int?)它也做相反的事情:给函数一个浮点数组,然后它可以将它转换成一个Vector3的数组。
所以这是我困惑的第一个领域。
下一个是*pVector++ = *this;——我认为这是指针运算,如果pVector指向数组中的第二个元素,使用这个表达式,我们将指针递增到数组的下一个元素,但只有在之后,我们首先将*this 分配给pVector 指向的当前元素。假设我在这方面是正确的,pVector 不会总是指向数组中的第一个元素,因为它只是在前一行创建的吗?!在这种情况下,++ 运算符的目的是什么?
【问题讨论】:
-
它将 Vector3 的内容存储在其他位置,由 any 类型的指针指向。可怕!
++增加指针以指向存储的数据。 -
我还是不明白选角。是不是因为
Vector3只是一组floats或其他什么,它可以被视为相同类型的数组?这将假设结构的成员像数组一样在内存中对齐,除非我不理解从Vector3到数组的这种转换。
标签: c++