【发布时间】:2026-01-21 19:20:12
【问题描述】:
我正在开发一个使用 Arduino 框架的 AVR 微控制器项目。
我正在构建一个简单的错误跟踪系统,结构为一个类 (ErrorManager)。我已经定义了几个函数,比如
void ErrorManager::error(??? errorCode) { // more on ??? later
// rise error in some way
}
我想在组成这个项目的不同模块中分别定义错误代码。在每个模块中,我想定义一个包含该模块代码的enum class,然后将它们传递给上面的error 函数:
namespace someNamespace /* or class SomeClass */ {
// cointains error codes for this class/module/part of the code
enum class ErrorCodes : unsigned int {
none = 0,
anError,
someOtherError
}
void foo() {
error(ErrorCodes::anError);
}
}
(让errManager 成为我项目的一个模块中声明的ErrorManager 对象)
我可以通过在??? 中写入unsigned int 并使用enum 而不是enum class 来完成此操作,但这意味着错误代码名称将在整个模块命名空间的范围内,或者在至少,在定义它们的整个类中,我宁愿避免这种情况。
有没有办法用enum class 做到这一点?例如,要在??? 中写一些内容,意思是“将任何 Enum(带有 unsigned int,或一些 typedefined 类型,甚至任何整数类型)作为参数”?
【问题讨论】:
-
为什么不
void ErrorManager::error(ErrorCodes errorCode)? -
@Juraj 因为不知道
ErrorCodes何时定义error,抱歉我没有说清楚。我正在更新问题。 -
然后使用命名空间而不是枚举。或包装在命名空间中的匿名枚举
-
谢谢,我没有想到后一种可能性!!但是,出于兴趣,是否可以以任何方式定义一个将任何
enum class作为参数的函数?像enums 的某种继承机制? (我相信不存在真正的继承,对吗?)
标签: c++ arduino microcontroller