我有color
類模板,一些typedef
S於它,和一堆顏色常量:如何只允許來自預定義的一組常量的值?
template<typename T>
class color
{
public:
color(T data) : data(data) {}
// other functions...
private:
T data;
};
typedef color<uint16_t> color16;
typedef color<uint32_t> color32;
typedef color16 guicolor;
const guicolor WHITE = 0xFFFF;
const guicolor BLACK = 0x000F;
// other colors...
我也有一些功能,這應採取預定義的guicolor
常量之一,例如:
void foo(guicolor Color) { ... }
然而,foo
還接受color<uint16_t>
類不僅僅是預定義的常量guicolor
,這是不希望BEC的其他實例因爲您應該只能使用GUI使用的預定義顏色集合。
我能guicolor
的color16
一個子類,但它是值得的/好的做法,因爲我不會添加任何附加功能的那類,只是把它作爲一個名稱從其他color16
實例來區分?還有其他解決方案嗎?
如果您要求解決問題而不是專門學習問題的答案,您應該詳細說明您的約束;不明白爲什麼其他實例不受歡迎,也不明白爲什麼你不使用'enum'。 – Hurkyl 2015-03-24 23:49:35
@Hurkyl我沒有使用'enum',因爲你不能擁有一個類類型的'enum'。任何想法我應該補充什麼?我想我已經在問題中包含了所有的限制。 – emlai 2015-03-24 23:52:12
我認爲最好的選擇是製作一個'predefined_color'子類。我想不出任何其他更清晰的想法。除了改變功能採取任何顏色的對象。其實,是的...做那個。 – 2015-03-24 23:54:00