我正在做一個配置類,將保存我的用戶應用程序的配置,並從文件讀取字符串。C++返回一個未知類型
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);
}
現在我想在應用程序使用其他地方獲取這些值,有沒有辦法讓我離開配置類的強制轉換? 事情是這樣的:
//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");
的原因是,所以我不有一大堆stringstreams的其他地方的代碼轉換配置值之前,我可以使用它們。 我會在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
但我做不到有多個配置鍵是int,float,布爾甚至別的東西。 我正在尋找一種方法來獲取密鑰類型的GetKey(char * keyLabel),然後將其轉換並返回。
或有更好的解決方案的任何意見!
請澄清。你是什麼意思「是否有一種方法可以離開配置類的強制轉換」。我不確定你在這裏問什麼。 – Brian
就我個人而言,我會有'int GetIntKey(...)','GetStringKey(...)'等等。 –