在C ++宏中,您可以使用PRINT_SIZE(bool);
PRINT_SIZE(char);
…
来获取传递的参数的文字字符串:
template <typename T>
void print_size() {
std::cout << sizeof(T) << std::endl;
}
使用这个宏,我可以编写一个非常简单的程序,它会给我机器上特定类型的长度:
print_size<bool>();
print_size<char>();
…
这确实有效,但我想使用C ++模板。使用以下模板函数可以轻松获得大小:
"bool"
我可以用任何类型调用此函数,它将输出大小:
{{1}}
有没有什么方法可以从这里得到一个文字{{1}},以便输出与宏的输出一样好?
答案 0 :(得分:2)
您可以使用typeid()
,如下所示:
int i;
cout << typeid(i).name(); // Most likely will print int but g++ prints i
cout << typeid(int).name(); // Also most likely will print int but g++ prints i
请注意,它返回的名称取决于编译器,可能是该类型的一些不寻常的形式。更多信息here。
修改强>
g ++(4.8)只打印基本类型的第一个字母。对于用户定义的类,它会打印名称中后跟名称的字符数。例如:
#include <iostream>
#include <typeinfo>
class myclass
{
myclass() {}
};
class my
{
my() {}
};
int main()
{
std::cout << typeid(int).name() << std::endl;
std::cout << typeid(bool).name() << std::endl;
std::cout << typeid(myclass).name() << std::endl;
std::cout << typeid(my).name() << std::endl;
}
产生以下输出:
i
b
7myclass
2my
答案 1 :(得分:2)
可以使用typeid:
使用RTTI(运行时类型推断)进行排序 void TestEngine(object sender, SpeechRecognizedEventArgs e)
{
switch (e.Result.Text)
{
case "Test":
//Label animation code goes here
break;
输出:
#include <iostream>
#include <typeinfo>
template <typename T>
void print_size() {
T a;
std::cout << typeid(a).name() << ": " << sizeof(T) << std::endl;
}
int main(){
print_size<bool>();
print_size<char>();
print_size<long>();
return 0;
}