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

Is it possible to add to class scope in C++?

使用 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 class 在 IOBuff class 之前。有解决办法吗?

编辑:n.m。在评论中提供了答案,in C++03 You Cannot

您可以将 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 won没用)。

让它成为 IOBuffInterface 的一部分,因为这就是它的真实面目。

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