宏中var的模板等价物 C++中的宏,可以使用var来获得传递的参数的字符串: #define PRINT_SIZE(type) \ (std::cout << sizeof(type) << " " << #type << std::endl) 这是有效的,但是我想用C++模板代替。使用以下模板功能可轻松获取尺寸: template <typename T> void print_size() { std::cout << sizeof(T) << std::endl; }

宏中var的模板等价物 C++中的宏,可以使用var来获得传递的参数的字符串: #define PRINT_SIZE(type) \ (std::cout << sizeof(type) << " " << #type << std::endl) 这是有效的,但是我想用C++模板代替。使用以下模板功能可轻松获取尺寸: template <typename T> void print_size() { std::cout << sizeof(T) << std::endl; },c++,macros,C++,Macros,我可以用任何类型调用此函数,它将输出大小: print_size<bool>(); print_size<char>(); … 有没有任何方法可以从这里得到一个文本布尔值,这样输出就会像宏一样好?您可以使用typeid,如下所示: 可以通过使用typeid的RTTI运行时类型推断来完成: #include <iostream> #include <typeinfo> template <typename T> void print_

我可以用任何类型调用此函数,它将输出大小:

print_size<bool>();
print_size<char>();
…
有没有任何方法可以从这里得到一个文本布尔值,这样输出就会像宏一样好?

您可以使用typeid,如下所示:


可以通过使用typeid的RTTI运行时类型推断来完成:

#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;
}

使用RTTI的typeidtype.name,我从未尝试过这个?我还可以执行typeidT.name并得到相同的结果,因此似乎没有必要实例化该类型。这种表示有点神秘,看起来像printf格式说明符,但总比没有好。谢谢很高兴知道。wikibooks页面上说,表示依赖于编译器。通过GCC和Clang,我可以得到单个字母。您尝试了哪种编译器?@MartinUeding我使用的是g++4.8.4,但实际上我从未尝试过基本类型,只尝试过我定义的类。我刚刚运行了一系列测试,g++给出了int、float、double和bool的I、f、d和b。但是,对于我定义的类,它给出了全名,前面是字符数,例如,mytype显示为6mytype,mine显示为4mine。
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
#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
#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;
}
b: 1
c: 1
l: 8