将给定类型的任何枚举作为函数参数传递



我正在使用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,或某些typedefined类型,甚至任何整数类型(作为参数"?

您似乎需要一个模板:

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_ifis_enum将模板限制为枚举,但我目前无法编译它。Arduino似乎缺少标准库。

请注意,enum的默认底层类型是int,而不是unsigned int

相关内容

  • 没有找到相关文章

最新更新