我正在使用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
做到这一点?例如,在???
中要写些什么,意思是"将任何枚举(具有无符号int,或某些typedef
ined类型,甚至任何整数类型(作为参数"?
您似乎需要一个模板:
template <typename T>
void /*ErrorManager::*/error(T x)
{
unsigned int errorcode = (unsigned int)x;
// Do something with it
}
enum class ErrorCodes : unsigned int {
none = 0,
anError,
someOtherError
};
void foo() {
error<ErrorCodes>(ErrorCodes::anError);
}
应该可以使用enable_if
和is_enum
将模板限制为枚举,但我目前无法编译它。Arduino似乎缺少标准库。
请注意,enum
的默认底层类型是int
,而不是unsigned int
。