将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的名称)在文本文件中,我们的数据将在它旁边。
它只是一个想法,它应该工作,但我想这将不是很简单,你的程序将不得不支付速度。