使用C ++ 03,请考虑以下代码:
enum compare_status {
no_match,
match,
partial_match,
error
};
// Interface
class IOBuffInterface {
public:
virtual ~IOBuffInterface() {}
virtual compare_status compare(uint8_t* start, unsigned n) = 0;
};
// Object
class IOBuff: public IOBuffInterface {
public:
virtual ~IOBuffInterface() {}
virtual compare_status compare(uint8_t* start, unsigned n) = 0;
};
是否可以让compare_status
枚举成为IOBuff
范围的一部分,因此它看起来像外部IOBuff::compare_status
,问题是IOBuffInterface
需要它1}}在IOBuff类之前的类。对此有什么解决方案吗?
编辑:n.m。在评论中提供了答案,在C ++ 03中你不能
答案 0 :(得分:3)
您可以将typedef添加到IOBuff
:
class IOBuff: public IOBuffInterface {
public:
typedef ::compare_status compare_status;
virtual ~IOBuffInterface() {}
virtual compare_status compare(uint8_t* start, unsigned n) = 0;
};
这允许您命名类型(例如,在C ++ 11中IOBuff::compare_status
,IOBuff::compare_status::no_match
),但它不会将枚举添加到范围(例如IOBuff::no_match
赢得& #39; t work)。
答案 1 :(得分:3)
让它成为IOBuffInterface
的一部分,因为它就是它的真实含义。
任何继承自IOBuffInterface
的类都需要compare_status
。现在还不清楚为什么它的定义应该包含在IOBuffInterface
的一个特定的内容中,而不是平等地提供给所有兄弟姐妹。