[英]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;
}
};
它是與OpenGL相關的C ++代碼,但我的問題不是關於OpenGL。 glm::vec3, vec4, mat4
只是3和4維的向量,mat4是4x4方陣。 glm庫重載了運算符,如下所示:
theMat[3] = glm::vec4(CalcOffset(fElapsedTime), 1.0f);
按照你的預期工作,用一個由1.0f
和cast或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)
在CalcOffset
上fElapsedTime
指向的函數。
沒有演員。 它是函數指針的typedef。
OffsetFunc
類型是一個指向函數的指針,該函數將float
作為參數並返回glm::vec3
。
typedef glm::vec3(*OffsetFunc)(float);
是C(和C ++)語法中較為模糊的部分之一。
它說新類型OffsetFunc
是一個指向函數的指針,該函數接受一個參數float,並返回一個glm::vec3
。
CalcOffset(fElapsedTime)
是通過這樣的函數指針調用函數:必須在調用它之前設置函數指針以指向合適的函數。
typedef glm::vec3(*OffsetFunc)(float);
創建函數指針的typedef。 該函數返回glm::vec3
並采用float
參數。
CalcOffset(fElapsedTime)
這是使用參數fElapsedTime
調用CalcOffset
指向的函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.