Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
3年前关闭。
我有一个双重成员的班级:
我有一个包含成员名称的字符串向量:
我想通过将其名称传递给
所以我想知道如何将成员的名称转换为该成员的值?
这不是一个坏选择。
但是,如果您想使其更复杂但使
抱歉,这很丑陋,但效率稍高,因为映射查找比一系列字符串比较要快。如果您的向量存储枚举值而不是文本字符串,则效率会更高(如果需要,您可以编写另一种方法将枚举转换回文本字符串)。
说完所有关于效率的内容后,请允许我提及您可能不需要效率!如果效率至关重要,那么最好重新设计程序,这样就无需按名称标识变量。
考虑到这一点,我建议使用最简单,最直接的代码。 if的链是“正确”的答案,因为它使正在发生的事情非常明显。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
3年前关闭。
我有一个双重成员的班级:
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;
}
抱歉,这很丑陋,但效率稍高,因为映射查找比一系列字符串比较要快。如果您的向量存储枚举值而不是文本字符串,则效率会更高(如果需要,您可以编写另一种方法将枚举转换回文本字符串)。
说完所有关于效率的内容后,请允许我提及您可能不需要效率!如果效率至关重要,那么最好重新设计程序,这样就无需按名称标识变量。
考虑到这一点,我建议使用最简单,最直接的代码。 if的链是“正确”的答案,因为它使正在发生的事情非常明显。
关于c++ - 如何将字符串变量名称转换为变量的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39148572/