Ответ так длинный, что я не могу подвести итог всему, но:
int
или float
шаблоны operator +
add(5, 3);
может быть реализовано иначе, чем add(5, 3);
, что невозможно с макросами #define min(i, j) (((i) < (j)) ? (i) : (j))
- параметры i
и j
оцениваются дважды. Например, если какой-либо параметр имеет постинкрементную переменную, инкремент выполняется два раза Примечание. В некоторых редких случаях я предпочел полагаться на переменные макросы, потому что есть нет такой вещи, как вариативные шаблоны, пока c ++ 0x не станет основным. C ++ 11 является живым.
Ссылки:
Этот вызов:
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float)));
… переопределяет предыдущий вызов и привязывает атрибут 0
(атрибут позиции) к вашим данным цвета. У первого аргумента 1
должна быть правильная привязка.