【发布时间】:2022-08-18 23:18:44
【问题描述】:
是否可以进行枚举,其中(某些)成员可以从用户代码访问,而其他成员则保留用于实现?
这是我试图处理的情况的一个缩小示例:我有一个基准测试框架,我在其中检测用户提供的功能。为了检查执行的健全性,用户应该报告执行是否正确,因此创建了一个return_code 枚举:
enum return_code {
ok,
error,
execution_timeout,
waiting_time_exceeded
};
最后两个枚举器不应该对用户可用,即我是负责检查是否有超时或处理队列从未按时执行函数的人。
我目前对这种情况的处理是将枚举器拆分为私有和公共接口:
namespace detail {
enum return_code_internal {
ok,
error,
execution_timeout,
waiting_time_exceeded
};
}
enum return_code {
ok,
error
};
所以return_code::ok 映射到detail::return_code_internal::ok,error 也是如此,而“内部”枚举数对用户不可见。这可行,但在两种类型之间转换时迫使我跳过箍,因为它们不是对称的(一个有 2 个成员,而另一个有 4 个)。有没有更好的办法?
P.S 我知道在 C++ 中,枚举器具有相同的可见性。我正在寻找一种可以模拟将两个enum 成员作为“公共”,而另外两个是“私人”(或供内部使用)的技术。
-
使用具有
static成员的类作为枚举? -
@NathanOliver 这听起来可行。你的意思是我会有公共/私有成员,然后内部实现的类将成为“枚举器类”的朋友,以便能够访问内部,对吗?我会很感激答案中的粗略草图,这样我就不会迷失在细节中
标签: c++ design-patterns enums