C++语法:使用typedef进行类型转换
C++ syntax: Using a typedef to typecast
我正在查看这段代码,语法有问题:
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)
这是在调用参数为fElapsedTime
的CalcOffset
所指向的函数。
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++中的双指针类型转换
- 逐位操作的隐式类型转换
- 模板中的类型转换
- 在 C++(和 C)中进行类型转换时明显不一致
- 字符类型转换不兼容
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- C++:用户定义的显式类型转换函数错误
- 将类指针类型转换为键时出错
- 通过引用传递参数时C++类型转换
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
- C++无效的函数类型转换
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何将Windows产品类型转换为名称?
- 通过构造函数方法输出的类到类类型转换是 5500 为什么不是 5555
- UnspecifiedPoolType的类型?关于typedef、成员函数指针和转换运算符
- C++语法:使用typedef进行类型转换
- c++使用typedef避免类型转换警告