Ближайший вы можете получить в C с использованием имени типа как конструктор использовать соединение буквального:
vec3 test = (vec3){ 0.0, 1.0, 0.4 };
Это, конечно, канавы тело функции, чтобы вы не имеют реальной возможности делать что-либо за пределами установленных значений (он также не выделяет динамическое хранилище, вам придется делать это отдельно). Это дает вам несколько дополнительных функций, которые приятно иметь, хотя (автоматически обнуляет поля, короче для сложных структур и т. Д.).
C имеет несколько пространств имен (то есть несколько способов интерпретировать одно и то же слово), но они выделены ключевыми словами (например, struct
или enum
), или они являются основным «общим» пространством. После того, как вы напечатаете typedef
, вы поместите его в «общее» пространство, используя значение этого имени, чтобы оно также не могло быть присвоено функции. Там нет «имени func» или чего-то подобного.
Вы могли использовать функцию, как макрос, чтобы обернуть newvec3
:
#define vec3(...) newvec3(__VA_ARGS__)
Это будет только расширяться vec3
в newvec3
, когда это в контексте функции вызова, так что это позволило бы продолжать использовать из имя в контексте типа. Но вы, вероятно, не должны этого делать - он не делает фактически добавляет второе значение в глобальное пространство имен, это просто замена, которая иногда срабатывает, а иногда и не (и, что еще хуже, срабатывает независимо от правил области, что нарушает C семантика для имен нормального типа и функций). У вас должно быть два отдельных имени в реальном программном пространстве; может также сделать это явным.
новыйvec3 сделать память утечка. Также использовать C++. – BLUEPIXY
yikes, это очень плохо. Вы получаете утечку памяти каждый раз, когда вы создаете новый vec3. Как правило, это делается, просто объявляя структуру, а затем вручную устанавливая ее элементы. 'vec3 test; test.x = 0.0; test.y = 1.0; test.z = 0.4'. Вы также можете использовать тот факт, что структуры смежны в памяти, устанавливая его равным массиву '{x, y, z}' – mklingen
Вы выделяете память, которую вы тогда эффективно отбрасываете: структура возвращается по значению и доступ к утерянному указателю. Это утечка памяти. –