gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:19:38 24 4
gpt4 key购买 nike

我正在开发一个使用 Arduino 框架的 AVR 微 Controller 项目。

我正在构建一个简单的错误跟踪系统,结构为一个类 (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,或一些 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 .

关于c++ - 将给定类型的任何枚举作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60791361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com