gpt4 book ai didi

C++ 返回未知类型

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:44 25 4
gpt4 key购买 nike

我正在制作一个配置类,它将保存我的用户应用程序的配置,并以字符串形式从文件中读取。

class ConfigKey
{
public:
string KeyLabel; //Will be used to identify this key
string KeyValue; //The value
bool IsEditable; //For developing uses only, I'm saving a few default and non editable keys for specific apps here
};
class Configuration
{
public:
void AddKey(char* keyLabel, char* keyValue, bool isEditable);
private:
vector<ConfigKey> configKeys;
};

所以当我启动应用程序时,我逐行读取配置文件并将其添加到我的配置类中:

//Constructor
Configuration::Configuration()
{
//read from file, examples
AddKey("windowWidth", "1024", false);
AddKey("windowHeight", "768", false);
}

现在我想在其他地方检索这些值以便在应用程序中使用,有没有一种方法可以让 Configuration 类保留转换?像这样:

//In the Configuration class
void* GetKey(char* keyLabel);

//And when I call it, I'd like to do something like this:
int windowAspectRatio = myApp.config.GetKey("windowWidth") / myApp.config.GetKey("windowHeight");

原因是我在代码的其他地方没有一堆字符串流在我可以使用它们之前转换配置值。我会将 configKey 的类型也保存在 ConfigKey 中,以便它可以自动转换自身。

有什么意见或建议吗?

编辑澄清:

我想使用此方法检索 configKey:

//In the Configuration Class
public:
int GetKey(char* keyLabel)
{
//the value I saved in ConfigKey is a "string" type, but I'm converting it to Int before I return it
//loop through the vector, find the keyLabel
stringstream mySS(foundKey.KeyValue);
int returnValue = 0;
mySS >> returnValue; //converted the string to int

return returnValue; //returned an int
}

所以我可以在代码的其他地方调用:

int myWidth = myConfig.GetKey("windowWidth"); //It's already converted

但我可以有多个 configKeys,它们可以是 intfloatbool 或什至其他类型。我正在寻找一种方法让 GetKey(char* keyLabel) 检查 keyType,然后转换它,然后返回它。

或关于更好解决方案的任何建议!

最佳答案

为此使用boost::variant

Boost 变体允许您表示多种类型,条件是每种类型都是可复制的。

boost::get 将允许您从变体中获取类型。

使用示例:

using string_or_int = boost::variant<std::string, int>;

std::vector<string_or_int> data;

std::string& s = boost::get<std::string>(data[0]);

你可以使用这个概念制作一个模板来获取你想要的任何配置信息:

template<typename T> T get_config_data(const std::string& key) {
return boost::get<T>( some_variant );
}

用法:

std::string window_name = config.get_config_data<std::string>("WindowName");
int window_width = config.get_config_data<int>("WindowWidth");
int window_height = config.get_config_data<int>("WindowHeight");

关于C++ 返回未知类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17735122/

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