Har*_*rry 2 c++ syntax function-pointers
我发现以下C++代码的语法我以前从未见过.有人关心如何详细说明这项工作吗?
功能1
glm::vec3 BottomCircleOffset(float fElapsedTime)
{
return glm::vec3(.0f,.0f,.0f);
}
Run Code Online (Sandbox Code Playgroud)
功能2
glm::vec3 OvalOffset(float fElapsedTime)
{
return glm::vec3(.1f, .1f, .1f);
}
Run Code Online (Sandbox Code Playgroud)
实例结构
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;
}
};
Run Code Online (Sandbox Code Playgroud)
到现在为止一切都很好.我知道OffsetFunc是一个函数指针的typedef,它将 float作为参数并返回一个glm :: vec3.我也理解CalcOffset是这样一个函数的变量.
然后代码创建一个Instance类型数组,如下所示:
Instance g_instanceList[] =
{
{StationaryOffset},
{OvalOffset},
{BottomCircleOffset},
};
Run Code Online (Sandbox Code Playgroud)
这是我以前从未遇到过的语法:
Instance
是一个聚合 - 它包含公共数据成员,但没有构造函数,析构函数或其他复杂性,因此可以(在许多方面)被视为struct
在C中.
特别是,它可以通过为括在括号中的成员指定值列表来进行聚合初始化.一个简单的例子:
struct s {int a,b,c;};
s example = {1,2,3}; // initialises a=1, b=2, c=3
Run Code Online (Sandbox Code Playgroud)
数组也可以进行聚合初始化:
int a[3] = {1,2,3};
Run Code Online (Sandbox Code Playgroud)
并且,如果数组成员是聚合,那么它们中的每一个都可以依次进行聚合初始化:
s a[3] = {{1,2,3},{4,5,6},{7,8,9}};
Run Code Online (Sandbox Code Playgroud)
您的示例与此相同:Instance
数组中的每个都是聚合初始化的,使用提供的函数指针初始化CalcOffset
成员.
归档时间: |
|
查看次数: |
256 次 |
最近记录: |