是否可以在C ++中添加类范围?

时间:2015-09-18 13:56:50

标签: c++ c++03

使用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中你不能

2 个答案:

答案 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_statusIOBuff::compare_status::no_match),但它不会将枚举添加到范围(例如IOBuff::no_match赢得& #39; t work)。

答案 1 :(得分:3)

让它成为IOBuffInterface的一部分,因为它就是它的真实含义。

任何继承自IOBuffInterface的类都需要compare_status。现在还不清楚为什么它的定义应该包含在IOBuffInterface的一个特定的内容中,而不是平等地提供给所有兄弟姐妹。