Я просматриваю этот кусок кода и у меня проблемы с синтаксисом:
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);
работает, как вы могли ожидать, заполняя 4-й столбец theMat
4-мерным вектором, состоящим из 1.0f
и этим вызовом типа cast, typedef или вызовом функции, я не совсем уверен, что это такое, и это мой вопрос.
Что означают typedef glm::vec3(*OffsetFunc)(float);
и CalcOffset(fElapsedTime)
?
Я попытался прочесть здесь: http://en.wikipedia.org/wiki/Typedef#Using_typedef_with_type_casts, но это объяснение, похоже, не имеет смысла для меня.
Редактировать: я знаю, как работают typedef, когда просто требуется предоставить другой псевдоним для типа.
Редактировать 2: Я подумал, что это может быть что-то с указателем на функцию, потому что он выглядит как указатель и имеет float
там, как его тип параметра функции, и кажется, что это так , но я все еще не уверен, что именно делает этот вид кода.