我正在編寫一個Vec3類,併爲了優化目的,我沒有構造函數。 我也希望能夠以x,y,z或者r,g,b或者OR作爲標籤訪問其成員。 容易,你可能會想:使用工會初始化結構的聯合很好
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};
,但我已經把雙括號,因爲我「M在結構中初始化一個結構(像這樣:Vec3_t<int> v = {{1, 2, 3}}
)
所以,我的問題是:我怎麼能做到這一點,這樣我可以有不同的名稱都訪問,並與初始化1對大括號?
我的嘗試:每個組件都有一個聯合,但隨後以access作爲表退出(可以始終調用& vx並將其視爲浮點[3],但這有點髒......而不是所以我想是安全的)
不成熟的優化是萬惡之源。這是一個模板類,所以構造函數的源將在編譯時可用。大多數現代編譯器將使用所有這些信息來生成最優代碼。節省一些時間並寫一個構造函數。 –
其實,我不想要一個ctor,所以當我做一個'新的Vec3_t [x]'時,什麼都不會被調用。但我做了一個小測試,似乎有一個空的默認ctor允許相同的...我想我會去ctor。 – Zonko
@Zonko如果我的答案在下面解決了你的問題,請你點擊它旁邊的複選標記(就在上下箭頭的下方),將其標記爲答案? –