如何将字符串变量名转换为变量的值
How to convert a string variable name into a the value of the variable
-
我有一个有双重成员的班级:
double price; double kg; etc.
-
我有一个字符串向量,其中包含成员的名称:
vector<string> vec = {"price", "kg", etc};
-
我想通过将其中一个值的名称传递给
getValue()
方法来检索它:double answer = getValue(vec[0]);
-
所以我想知道如何将成员的名称转换为该成员的值?
首先,要认识到这并不容易。在运行时,C++根本没有关于变量名称等的信息。如果你真的经常需要这些信息,可以考虑使用另一种语言,如C#或Java,或者任何其他支持反射的语言。
话虽如此:
看起来你想通过提供一个识别变量的文本字符串来选择它
double getValue(const string &name)
{
if( name == "name1")
return name1;
if(name == "name2")
return name2;
return not_found_value;
}
这是一个不错的选择。
然而,如果你想让它更复杂,但让getValue
代码更高效:
enum Names
{
NAME1, NAME2, ...NAMEN
};
typedef std::map<std::string, Names> StringToEnum;
StringToEnum stringToEnum;
void initialize()
{
stringToEnum["name1"] = NAME1;
etc for names 2 through N
}
double getValue(const string &name)
{
auto found = stringToEnum.find(name);
if(found != stringToEnum.end())
{
switch(found->second)
{
case NAME1: return name1;
case NAME2: return name2;
etc.
}
}
return notFoundValue;
}
很抱歉,这很难看,但它的效率略高,因为映射查找比一系列字符串比较更快。如果您的向量存储枚举值而不是文本字符串,则效率会更高(如果需要,您可以编写另一种方法将枚举转换回文本字符串。(
说了这么多关于效率的话,让我提一下,你可能不需要它来提高效率!如果效率至关重要,那么最好重新设计程序,这样就不需要按名称识别变量。
考虑到这一点,我推荐最简单、最直接的代码。"如果"的链条是"正确"的答案,因为它使正在发生的事情变得非常明显。
相关文章:
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 是否可以将已经初始化的变量转换为 void*?
- C++字符串类如何将一个变量转换为另一个变量?
- std::chrono::time_point 从变量转换时编译器错误
- std::变量转换构造函数行为
- 尝试将字符串变量转换为布尔值会导致 "true" 和 "false" 都等于 0
- C++将字符变量转换为字符串变量将返回 ASCII 值
- 将大端序的 32 位变量转换为小端序
- 在代码优化过程中,C++11编译器是否会在可能的情况下将局部变量转换为右值
- 有符号浮点变量转换为无符号DWORD
- 将初始变量转换为已声明的变量
- 将C++字符串变量转换为long
- 如何将DWORD或char*类型的变量转换为LPCWSTR
- 如何在 c++ 中将包含时间的字符串变量转换为time_t类型
- C++变量转换为模板参数
- 将 [char] 变量转换为 [int],然后再转换回 [char]
- 如何将 int 变量转换为 ASCII 单词
- 将c++类的私有变量转换为公有变量
- 将变量转换为const
- 如何将方法返回的接口变量转换为对象