将字符串转换为变量名称或变量类型

时间:2011-08-22 04:17:22

标签: c++ string

是否可以通过执行以下操作将字符串转换为变量(反之亦然):

makeVariable("int", "count");

string fruit;
cin >> fruit;    // user inputs "apple"
makeVariable(fruit, "a green round object");

然后可以通过执行以下操作来访问它:

cout << apple; //a green round object

提前致谢!

7 个答案:

答案 0 :(得分:18)

不,这是不可能的。这种功能在Ruby和Python等脚本语言中很常见,但C ++的工作方式与那些不同。在C ++中,我们尝试尽可能多地完成程序的工作compile time。有时候我们可以在runtime做一些事情,即使这样,优秀的C ++程序员也会在编译时找到一种方法来完成工作。

如果您知道要创建变量,请立即创建变量:

int count;

您可能不知道的是变量的值,因此您可以将其推迟到运行时:

std::cin >> count;

如果您知道自己需要一组变量,但不确切知道有多少变量需要创建mapvector

std::vector<int> counts;

请记住,变量的名称只不过是名称 - 您可以在以后引用该变量。在C ++中,不可能 对于在运行时推迟分配变量名称非常有用。所有这一切都会使你的代码变得更复杂,程序更慢。

答案 1 :(得分:8)

您可以使用地图。

map<string, int> numbers;
numbers["count"] = 6;
cout << numbers["count"];

答案 2 :(得分:5)

您可能需要查看C++ map

答案 3 :(得分:5)

初学程序员就每种语言提出这个问题。有一组计算机语言,这个问题的答案是“是”。这些是动态交互式语言,如BASIC,Lisp,Ruby,Python。但想一想:变量名只存在于代码中,以方便程序员。如果有人随后在新代码中键入变量的名称,则在程序运行时定义新变量才有意义。这对于交互式语言环境来说是正确的,对于像C ++或Java这样的编译语言则不然。在C ++中,当程序运行时,并且会创建虚构的新变量,没有人可以输入使用该新变量的代码。

你真正想要的是能够在运行时将名称与对象相关联,这样代码 - 而不是人 - 可以使用该名称来查找对象。正如其他人已经指出的那样,C ++标准库的map功能为您提供了这种能力。

答案 4 :(得分:1)

没有。 C ++是静态类型的,这违背了整个范例。

我之前通过在stl映射中存储变量看到了这种类型的功能。

答案 5 :(得分:1)

至少对于(反之亦然),预处理器语句stringify #有可能。有关如何将C ++变量名转换为字符串,请参阅this answer

答案 6 :(得分:-5)

我猜你不能制作动态变量,但你可以使用一些函数在任何外部文本文件中写入一个新变量及其值,并从需要它的文件中访问它的值(你也可以删除动态变量)将其从文本文件中删除。)

理论:变量是我们存储数据的内存中的位置,由名称标识,如果处理器不允许我们将数据存储在寄存器中,我们可以将数据存储在文本文件中,我们可以通过搜索其身份来访问它的值(变量名称)在文本文件中,我们的数据将紧挨着它。

它只是一个想法,它应该工作,但我想它不会很简单,你的程序将不得不支付速度。