我如何得到一个variables的types?
在C ++中,如何find一个variables的types?
您可以使用typeid运算符 :
#include <typeinfo> ... cout << typeid(variable).name() << endl;
通常,想要在C ++中查找variables的types是错误的问题。 它往往是你从过程语言,例如C或Pascal携带的东西。
如果要根据types对不同的行为进行编码,请尝试了解如函数重载和对象inheritance 。 在C ++的第一天,这不会立即产生意义,但要坚持下去。
对于静态插入,C ++ 11引入了decltype
,在某些情况下非常有用。
如果你有一个variables
int k;
你可以使用它的types
cout << typeid(k).name() << endl;
看到SO上的以下线程: 类似的问题
C ++和Javascript之间的主要区别在于C ++是一种静态types语言,而javascript是dynamic的。
在dynamictypes语言中,一个variables可以包含任何事物,并且它的types由它保存的值给出。 在静态types语言中,variables的types被声明,并且不能改变。
可以有dynamic调度和对象组合和子types(inheritance和虚函数)以及静态分派和超types(通过模板CRTP),但是在任何情况下,variables的types必须为编译器所知。
如果你不知道它是什么或者可能是什么,那是因为你devise了一些东西,因为这个语言有一个dynamic的types系统。
如果是这样的话,你最好重新考虑一下你的devise,因为它正在进入一个你使用的语言不自然的土地(最喜欢用高速公路上的毛毛虫或水上的汽车)
#include <typeinfo> ... string s = typeid(YourClass).name()
我相信我有一个使用typeid()的有效用例,这与使用sizeof()的方法是一样的。 对于模板函数,我需要基于模板variables特殊的代码,以便我提供最大的function和灵活性。
它比使用多态性更紧凑和可维护,为每种支持的types创build一个函数实例。 即使在这种情况下,我也可以用这个技巧只写一次函数体:
请注意,因为代码使用模板,所以下面的switch语句应该静态地parsing为一个代码块,优化所有的错误情况AFAIK。
考虑这个例子,我们可能需要处理一个转换,如果T是一个types与另一个。 我使用它来进行专业分类,以访问硬件将使用myClassA或myClassBtypes的硬件。 如果不匹配,我需要花时间转换数据。
switch ((typeid(T)) { case typeid(myClassA): // handle that case break; case typeid(myClassB): // handle that case break; case typeid(uint32_t): // handle that case break; default: // handle that case }