저는 Vec3 클래스를 코딩하고 있습니다. 최적화를 위해 생성자가없는 상태로 만듭니다. 또한 멤버를 x, y, z 또는 r, g, b OR로 탭에 액세스 할 수 있기를 원합니다. 나는 아무의 ctor이 없기 때문에, 나는 다음과 같이 초기화하고 싶습니다struct의 초기화를 멋지게 초기화합니다.
template <typename T> struct Vec3_t
{
union
{
T val[3];
struct { T x, y, z; };
struct { T r, g, b; };
};
};
그리고 노동 조합을 사용합니다 : 쉬운, 당신은 생각
Vec3_t<int> v = {1, 2, 3};
하지만 난 이후 이중 중괄호를 넣어야 할
그래서, 내 질문은입니다 : '(Vec3_t<int> v = {{1, 2, 3}}
같이) : 구조체의 구조체를 초기화 해요 내가 한 쌍으로 모두 다른 이름으로 액세스 및 초기화를 가질 수 있도록 어떻게 그것을 할 수 중괄호?
내 시도 : 각 구성 요소에 대해 하나의 공용 구조체가 있지만 테이블로 액세스하여 종료 할 수 있습니다 (항상 &vx를 호출하여 float [3]로 처리 할 수 있지만 더럽지는 않습니다 ...). 그래서 안전하다고 생각합니다)
조숙 한 최적화는 모든 악의 뿌리입니다. 이것은 템플릿 클래스이므로 생성자의 소스는 컴파일 할 때 사용할 수 있습니다. 대부분의 최신 컴파일러는이 모든 정보를 사용하여 최적의 코드를 생성합니다. 시간을 절약하고 생성자를 작성하십시오. –
사실, 나는 '새로운 Vec3_t [x]'를 할 때 아무 것도 불리지 않기 위해 ctor를 원하지 않았다. 그러나 나는 방금 약간의 테스트를했고, 그것은 빈 디폴트 ctor를 갖는 것이 같은 것을 허용하는 것처럼 보입니다 ... 나는 ctor에 갈 것이라고 생각합니다. – Zonko
@ Zonko 아래의 내 대답이 문제를 해결 한 경우 답변 옆에있는 체크 표시 (위아래 화살표 아래)를 클릭하여 답을 표시 하시겠습니까? –