維基百科上有一個有趣的模板,用於Properties。沒有繼承的回收成員功能
該模板提供了一些有趣的內容,因爲它允許提供圍繞成員訪問的邏輯。在此基礎上,我們可以很容易建立這樣的事情:
struct Ranged {
ranged_property<float,0,1> unit_property;
};
凡unit_property
範圍被強制爲[0,1]內。
我們如何提供一個類似的功能取決於託管類的成員?例如:
struct AdjustableRanged {
float max;
ranged_property<float,0,max> influenceable_property;
};
凡influenceable_property
範圍受到的max
的值影響。請記住,我們的目標是讓這種模板在很多不同的類中循環使用。相關概念是mixin和裝飾器。
它可以用宏來完成......但我覺得有必須是一個更好用的C++解決方案。
編輯補充:我覺得這可以通過保存到ranged_property模板中的成員的引用來完成......但是這似乎是空間,這將是有效的恆定值,完全是浪費; ETA;一個const引用實際上可以達到目的,但是,我需要進行調查。
爲什麼你要'max'作爲'AdjustableRange'中的獨立數據成員,而不是將其封裝爲'ranged_property'對象的成員(然後將其規定給構造函數)? – 2014-10-22 02:53:54
我不確定參考會浪費空間。它是實現定義的,實際上如何實現引用,但最終它們只是另一個名稱,因此與使用原始變量名相比,編譯器輸出中可能沒有任何可見的變化。也許,對主要編譯器的內部工作更瞭解的人可以對此進行評論... – Oguk 2014-10-22 02:56:27
模板是編譯時結構,它們不能用運行時值初始化。 – 2014-10-22 03:16:34