我如何得到一个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 }