int a = 1;
int b = 2;
int c = 3;
std::string TakeFrom = "a";
如何从 TakeFrom 获取值,在本例中为 a,并读取这样命名的整数?例如,在上面的代码中,我必须读取 a 的值,因为“a”是 TakeFrom 包含的内容,所以我会得到“1”,但如果 TakeFrom 包含“b”,我会得到 b 的值 (2)。
最佳答案
在正常的 C/C++ 条件下,变量名仅在编译期间在其给定范围内存在,它们本质上是人类可读的助记符,用于引用特定的内存位置/寄存器。
C/C++ 具有极小的反射功能,因此没有内置方法在运行时通过名称引用变量或通过变量的位置/值查找变量的名称。
要解决您所描述的问题,有几个简单的选项:
int value;
if (TakeFrom == "a") {
value = a;
} else if (TakeFrom == "b") {
value = b;
} ...
或
switch (TakeFrom[0]) {
case 'a':
value = a;
break;
case 'b':
value = b;
break;
}
或者你可以使用查找表
int a = 1, b = 2, c = 3;
struct Lookup {
int& m_variable;
const char* m_name;
};
static const size_t NumLookups = 3;
Lookup lookups[NumLookups] = { { a, "a" }, { b, "b" }, { c, "c" } };
for (size_t i = 0; i < NumLookups; ++i) {
if (TakeFrom == lookups[i].m_name)
value = lookups[i].m_variable;
}
关于c++ - 从名称在字符串上的整数获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19735042/