【发布时间】:2015-03-24 23:44:04
【问题描述】:
我有 color 类模板,上面有一些 typedefs,还有一堆颜色常量:
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 常量,这是不可取的,因为您应该只能使用 GUI 使用的预定义颜色集。
我可以将guicolor 设为color16 的子类,但值得/好的做法,因为我不会向该类添加任何其他功能,仅将其用作与其他color16 实例区分开来的名称?有没有其他解决方案?
【问题讨论】:
-
如果你是为了解决问题而不是专门学习你的问题的答案,你可能应该详细说明你的限制;不清楚为什么其他实例不受欢迎,也不清楚为什么您不使用
enum。 -
@Hurkyl 我没有使用
enum,因为你不能拥有一个类类型的enum。任何想法我还应该添加什么?我想我已经在问题中包含了所有限制条件。 -
您可以更改您的函数以接收枚举并在内部执行转换为
color。 -
详细信息与问题标题不符。并不是您只想允许 typedef,而是您只想允许某些值。请编辑。
-
不,也可以是
an additional functionality to that class到use it as a name to differentiate from other color16 instances。只是子类它。 (*)