Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将给定类型的任何枚举作为函数参数传递_C++_Arduino_Microcontroller - Fatal编程技术网

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

C++ 将给定类型的任何枚举作为函数参数传递,c++,arduino,microcontroller,C++,Arduino,Microcontroller,我正在为一个使用Arduino框架的AVR微控制器项目工作 我正在构建一个简单的错误跟踪系统,它是一个类(ErrorManager)。我定义了两个函数,如 void ErrorManager::error(?errorCode){//有关详细信息,请稍候 //以某种方式增加误差 } 我想在组成这个项目的不同模块中分别定义错误代码。在每个模块中,我想定义一个包含该模块代码的enum类,然后将它们传递给上面的error函数: namespace someNamespace/*或class Some

我正在为一个使用Arduino框架的AVR微控制器项目工作

我正在构建一个简单的错误跟踪系统,它是一个类(
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
,则需要编译器诊断消息。