Я кодирую класс Vec3, и для целей оптимизации я делаю это без конструктора.Я также хотел бы иметь возможность получить доступ к его членам как x, y, z ИЛИ как r, g, b ИЛИ как вкладка.Легко, вы можете подумать: используйте объединение
template <typename T> struct Vec3_t
{
union
{
T val[3];
struct { T x, y, z; };
struct { T r, g, b; };
};
};
Тогда, так как у меня нет ctor, я хотел бы инициализировать его так:
Vec3_t<int> v = {1, 2, 3};
, но я должен поставить двойнойфигурные скобки, так как я инициализирую структуру в структуре (например: Vec3_t<int> v = {{1, 2, 3}}
)
Итак, мой вопрос : как я могу сделать это так, чтобы я мог иметь оба доступа сразные имена и инициализация с одной парой скобок?
моя попытка: иметь одно объединение для каждого компонента, но затем выйти с доступом как таблицей (всегда можно вызвать & v.x и рассматривать его как число с плавающей запятой)[3], но это немного грязно ... и не так безопасно, я думаю)