是否可以在 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_status
、IOBuff::compare_status::no_match
),但它不会将枚举添加到范围(例如 IOBuff::no_match
won没用)。
让它成为 IOBuffInterface
的一部分,因为这就是它的真实面目。
从 IOBuffInterface
继承的任何 class 都需要 compare_status
。不太清楚为什么它的定义应该包含在 IOBuffInterface
的一个特定目录中,而不是平等地提供给所有兄弟姐妹。
使用 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_status
、IOBuff::compare_status::no_match
),但它不会将枚举添加到范围(例如 IOBuff::no_match
won没用)。
让它成为 IOBuffInterface
的一部分,因为这就是它的真实面目。
从 IOBuffInterface
继承的任何 class 都需要 compare_status
。不太清楚为什么它的定义应该包含在 IOBuffInterface
的一个特定目录中,而不是平等地提供给所有兄弟姐妹。