gpt4 book ai didi

C++ 并将枚举值写入 Windows 注册表

转载 作者:可可西里 更新时间:2023-11-01 11:35:35 26 4
gpt4 key购买 nike

我正在写一个函数如下:

bool abc::GetLoggingStatus() {
//true or false is returned
int value;
if (regKey->HasValue("LoggingStatus")) {
regKey->QueryValue("LoggingStatus", &value);
if (value == 1)
return true; //no logging possible
else
return false;
}
regKey->SetValue("LoggingStatus", 1);
return true;
}

日志级别定义为:

typedef enum {
Entry,
Exit,
Debug,
Warning,
Notification,
Error
} TYPE;

如果我选择 1,则必须显示日志记录级别,即调试、错误 ... 在注册表编辑器中,如果选择 0,则不应显示任何内容并禁用日志记录。

最佳答案

您不能在regedit 中创建下拉菜单,但您可以创建一个名为LoggingLevel 的新条目。 .如果 LoggingStatus 则忽略此条目是 0。LoggingLevel是定义级别的字符串。

如果您想将此字符串转换回枚举,最简单的方法是创建一个从字符串到您的枚举类型的映射:

std::map<std::string, TYPE> typeMap;
typeMap["Warning"] = Warning;
...

在您的代码中查询日志记录级别:

char* level;
regKey->QueryValue("LoggingLevel", level);
TYPE theLevel = typeMap[level];

当然你需要做适当的错误检查。

编辑

您应该添加两个函数来获取日志设置,shouldLog()getLevel() .日志函数将如下所示:

void log(Logger* logger, TYPE type, string sClassName, string sMethodName, string sMessage = "") { 
if (!logger || !abc::shouldLog()) {
return;
}


TYPE curLevel = abc::getLevel();
bool shouldLog = false;

if (type == Warning && (curLevel == All || curLevel == Warning) ...) {
shouldLog = true;
}

if (shouldLog) {logger->WriteEntry(sClassName, sMethodName); }

}

如果您想避免复杂的 if 结构,您还可以尝试将枚举映射到一个值并进行比较。例如 Warning = 1 和 ALL = 0。然后你可以检查是否 curLevel < type查看记录器是否应该记录。

关于C++ 并将枚举值写入 Windows 注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11949738/

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