C++ 将给定类型的任何枚举作为函数参数传递
我正在为一个使用Arduino框架的AVR微控制器项目工作 我正在构建一个简单的错误跟踪系统,它是一个类(C++ 将给定类型的任何枚举作为函数参数传递,c++,arduino,microcontroller,C++,Arduino,Microcontroller,我正在为一个使用Arduino框架的AVR微控制器项目工作 我正在构建一个简单的错误跟踪系统,它是一个类(ErrorManager)。我定义了两个函数,如 void ErrorManager::error(?errorCode){//有关详细信息,请稍候 //以某种方式增加误差 } 我想在组成这个项目的不同模块中分别定义错误代码。在每个模块中,我想定义一个包含该模块代码的enum类,然后将它们传递给上面的error函数: namespace someNamespace/*或class Some
ErrorManager
)。我定义了两个函数,如
void ErrorManager::error(?errorCode){//有关详细信息,请稍候
//以某种方式增加误差
}
我想在组成这个项目的不同模块中分别定义错误代码。在每个模块中,我想定义一个包含该模块代码的enum类
,然后将它们传递给上面的error
函数:
namespace someNamespace/*或class SomeClass*/{
//包含此类/模块/部分代码的错误代码
枚举类错误代码:无符号整数{
无=0,
一个错误,
其他错误
}
void foo(){
错误(错误代码::A错误);
}
}
(让errManager
成为项目的一个模块中声明的ErrorManager
对象)
我可以通过在?
中编写unsigned int
,并使用枚举
而不是枚举类
来实现这一点,但这意味着错误代码名将在整个模块名称空间的范围内,或者至少在定义它们的整个类中,我宁愿避免这样做
有没有一种方法可以通过
枚举类来实现这一点?例如,要在?
中写入的内容意味着“将任何枚举(具有无符号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);
}
模板
void/*ErrorManager::*/error(T x)
{
无符号整数错误代码=(无符号整数)x;
//用它做点什么
}
枚举类错误代码:无符号整数{
无=0,
一个错误,
其他错误
};
void foo(){
错误(错误代码::A错误);
}
应该可以使用and将模板限制为枚举,但我目前无法编译它。Arduino似乎缺少一些标准库
请注意,enum
的默认基础类型是int
,而不是unsigned int
为什么不void ErrorManager::error(ErrorCodes errorCode)
?@Juraj,因为定义error
时,ErrorCodes
是未知的,很抱歉我没有说清楚。我正在更新问题。然后使用名称空间而不是枚举。或者用名称空间包装的匿名枚举谢谢,我没有想到后一种可能性!!但是,出于兴趣,是否可以以任何方式定义一个以任何enum类
为参数的函数?像是enum
s的某种继承机制?(我相信真正的遗产是不存在的,对吗?)谢谢你的回答!但我仍然有一个问题:如果我使用一个模板,我如何确保我永远不会用无法转换为无符号int
的东西调用error
?使用模板类,每个错误代码类都会得到不同的实现。这就增加了代码大小。但是,这可能不是问题。如果T
无法转换为unsigned int
,则需要编译器诊断消息。