将string转换为variables名称或variablestypes

是否有可能将string转换为variables(反之亦然)通过执行如下操作:

makeVariable("int", "count"); 

要么

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

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

 cout << apple; //a green round object 

提前致谢!

不,这是不可能的。 这种function在诸如Ruby和Python之类的脚本语言中很常见,但是C ++与这些function完全不同。 在C ++中,我们试图在编译时尽可能多地执行程序的工作。 有时我们可以在运行时做一些事情,即使这样,好的C ++程序员也可以在编译时尽早地完成工作。

如果你知道你要创build一个variables,然后立即创build它:

 int count; 

你可能事先不知道的是variables的值,所以你可以推迟运行时:

 std::cin >> count; 

如果你知道你将需要一个variables的集合,但不是确切地有多less个variables,那么创build一个映射或一个向量 :

 std::vector<int> counts; 

请记住,variables的名称不过是一个名称 – 稍后您可以引用该variables的一种方法。 在C ++中,推迟在运行时分配variables的名称是不可能的也是有用的。 所有这些只会让你的代码变得更复杂,而且你的程序也会变慢。

你可能想看看C ++地图 。

你可以使用地图。

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

开始的程序员会问这个关于每种语言的问题。 有一组计算机语言对这个问题的回答是“是”。 这些是dynamic的,交互式的语言 ,比如BASIC,Lisp,Ruby,Python。 但想一想:为了方便程序员,variables名只存在于代码中。 在程序运行时定义一个新variables是有意义的,如果有一个人随后在新代码中inputvariables的名字。 对于交互式语言环境来说,这是正确的,而对于像C ++或Java这样的编译语言则不是这样。 在C ++中,在程序运行的时候,假想的新variables会被创build,所以没有人会使用这个新variables来input代码。

你真正想要的是能够在运行时将一个名字与一个对象关联起来,这样代码(而不是人)就可以使用这个名字来find这个对象。 正如其他人已经指出的那样,C ++标准库的map特征给了你这个能力。

不,C ++是静态types的,这违背了整个范例。

通过将variables存储在stl映射中,我已经看到了这种types的function。

至less对于(反之亦然)预处理程序语句stringify #有一个可能性。 看到这个答案如何将C ++variables名称转换为string。

以及我想你不能做dynamicvariables,但你可以使用一些函数来写一个新的variables和它的值在任何外部的文本文件,并从该文件中访问它的值,只要它需要(你也可以通过删除dynamicvariables从文本文件。)

理论:variables是我们存储数据的地方,我们用名字来标识数据,如果处理器不允许我们将它存储在寄存器中,我们可以将数据存储在文本文件中,并且我们可以通过search其身份(variables的名称)在文本文件中,我们的数据将在它旁边。

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