我有几个类,每个类使用相同的enum
,但根据其要求进行了一些扩展。
例如:
class skirtColor{
enum Color{
red = 1,
blue = 10,
green = 12
};
};
class dressColor {
enum Color{
red = 1,
pink,
yellow,
blue = 10,
green = 12
};
};
class pantsColor {
enum Color {
red = 1,
brown,
blue = 10,
green = 12
};
};
由于C ++中没有enum的继承,我想将define
用于公共部分
#define COLOR\
// red color \
red = 1,\
// blue color \
blue = 10,\
//green color
green = 12,
之后我可以在类
中重用常用的颜色定义class skirtColor{
enum Color{
COLOR
};
};
class dressColor {
enum Color{
COLOR
pink = 2,
yellow,
};
};
Class pantsColor {
enum Color {
COLOR
brown = 2,
};
};
这样可以吗? 我无法编译这段代码你能帮我正确定义宏吗?
答案 0 :(得分:5)
目前管理此类事情的一种方法是继承,它将继承类中的常量。
struct Color
{
enum { red = 1, blue = 10, green = 12 };
} ;
struct DressColor : Color
{
enum { pink =2, yellow = 3 };
};
和DressColor也有红色,蓝色和绿色..
如果要启用“严格键入”以使变量必须具有其中一个值,则可以使用“具有-a”值且只能在类中构造或修改的类来执行此操作。 / p>
struct Color
{
class Holder
{
private:
int value;
explicit Holder( int v ) : value( v ) {}
public:
bool operator==( const Holder & other ) const
{
return value == other.value;
}
int get() const
{
return value;
}
friend struct Color;
};
protected:
static Holder makeHolder( int v )
{
return Holder( v );
}
public:
static const Holder red;
static const Holder blue;
static const Holder green;
};
struct DressColor : Color
{
static const Holder pink;
static const Holder yellow;
};
// these in a .cpp file.
const Color::Holder Color::red( 1 );
const Color::Holder Color::blue( 10 );
const Color::Holder Color::green( 12 );
const Color::Holder DressColor::pink( Color::makeHolder(2) );
const Color::Holder DressColor::yellow( Color::makeHolder(3) );
// how you can create a variable of one. Note that whilst you cannot construct
// a Color::Holder from an int in the regular way, you can copy-construct.
Color::Holder var( Color::red );
当然,在这种“变通方法”中,枚举对象仍为Color::Holder
类型,并且DressColor::Holder
不能使用class DressColor
类型。
答案 1 :(得分:0)
Color
与此处COLOR
不同:
Enum Color{
Color
Pink = 2,
yellow,
};
此外,它是enum
和class
,全部为小写。
另外,放弃评论:
#define COLOR\
// red color \
red = 1,\
// blue color \
blue = 10,\
//green color
green = 12,
因为尾随\
会使所有内容成为评论。以上将扩展为:
// red color red = 1, // blue color blue = 10, //green color green = 12,
说完
#define COLOR \
red = 1,\
blue = 10,\
green = 12,
如果有人无法弄清楚red
代表什么颜色......好吧,我只会闭嘴。
答案 2 :(得分:0)
您的代码甚至无法正确使用C ++关键字。
你的...... Color
类的实例不代表颜色,所以类名有点误导。
但无论如何......
扩展enum
并不重要,因为它需要超类,而不是子类,这就是语言不支持的原因。
但似乎你只对名称可用感兴趣,而不是任何强类型,在这种情况下你可以做...
struct SkirtColors
{
enum { red = 1, blue = 10, green = 12 };
};
struct DressColors
: SkirtColors
{
enum { pink = 2, yellow = 3 };
};
答案 3 :(得分:0)
我倾向于从名为所有颜色的enum
开始,然后添加各种特定颜色的枚举,并使用第一个的值:
struct colors {
enum colors {
red = 1,
blue = 10,
pink = 2,
green = 12,
yellow = 3
};
};
struct skirt_colors {
enum colors {
red = colors::red,
blue = colors::blue,
green = colors::green
};
};