C++语法:使用typedef进行类型转换

C++ syntax: Using a typedef to typecast

本文关键字:类型转换 typedef 使用 语法 C++      更新时间:2023-10-16

我正在查看这段代码,语法有问题:

struct Instance
{
    typedef glm::vec3(*OffsetFunc)(float);
    OffsetFunc CalcOffset;
    glm::mat4 ConstructMatrix(float fElapsedTime)
    {
        glm::mat4 theMat(1.0f);
        theMat[3] = glm::vec4(CalcOffset(fElapsedTime), 1.0f);
        return theMat;
    }
};

它是C++代码,与OpenGL有关,但我的问题与OpenGL无关。glm::vec3, vec4, mat4只是维度为3和4的向量,mat4是一个4x4平方矩阵。glm库有重载运算符,因此行如下:

theMat[3] = glm::vec4(CalcOffset(fElapsedTime), 1.0f);

正如您所期望的那样,用一个由1.0f和该类型转换或typedef或函数调用组成的4-d向量填充theMat的第4列,我不确定这是什么,这是我的问题。

typedef glm::vec3(*OffsetFunc)(float);CalcOffset(fElapsedTime)是什么意思?

我试着在这里阅读:http://en.wikipedia.org/wiki/Typedef#Using_typedef_with_type_casts,但这种解释对我来说似乎真的没有意义。

编辑:我知道typedef是如何工作的,当它只是为一个类型提供另一个别名时。

编辑2:我认为这可能是用一个指向函数的指针来做一些事情,因为它看起来有点像一个指针,里面有float,就像它是一个函数参数类型,看起来是这样,但我仍然不确定这种代码到底是做什么的。

typedef glm::vec3(*OffsetFunc)(float);

OffsetFunc定义为类型glm::vec3(*)(float)的别名,即指向采用float并返回glm::vec3的函数的指针。

CalcOffset(fElapsedTime)

调用CCD_ 12在CCD_ 13上指向的函数。

没有强制转换。它是一个函数指针的typedef。

类型OffsetFunc是指向以float为自变量并返回glm::vec3的函数的指针。

typedef glm::vec3(*OffsetFunc)(float);

是C(和C++)语法中较模糊的位之一。

它说,新类型OffsetFunc是一个指向函数的指针,该函数接受一个参数,一个浮点值,并返回一个glm::vec3

CalcOffset(fElapsedTime)

是通过这样一个函数指针进行的函数调用:在调用它之前必须设置函数指针才能指向合适的函数。

typedef glm::vec3(*OffsetFunc)(float);

创建函数指针的typedef。该函数返回glm::vec3,并取一个float参数。

CalcOffset(fElapsedTime)

这是在调用参数为fElapsedTimeCalcOffset所指向的函数。