模板元编程:打印类型列表

时间:2015-06-15 10:08:01

标签: c++ templates

如何打印类型列表??

这是我尝试过的+我的类型列表:

tomas@tororrosso ~> java -jar selenium-server-standalone-2.46.0.jar -role node  -nodeConfig mac.json 

以便template<typename ...T> struct typeList; template<typename H, typename ...T> struct typeList<H, T...> { using head = H; using tail = typeList<T...>; public: static inline void print(){ std::cout << H::name << " "; // How can I get the name of H ??? typeList<T...>::print(); } }; template<> struct typeList<>{ static inline void print(){ std::cout << endl; } }; 提供typeList<A,B,C,int>::print()

B和C是一些用户定义的结构

我可以不在每个结构中添加一个名为A b C int的静态函数吗? 没有编译时间函数返回类型名称?

编辑:

这不是this的重复,我在哪里提到变量?

1 个答案:

答案 0 :(得分:2)

您可以使用typeid(H).name()。遗憾的是,name()的格式是实现定义的,因此您无法在所有情况下依赖于获得预期的输出。

例如,在GCC 4.9.2中,typeList<A,B,C,int>::print()打印:

1A 1B 1C i

一种可能的解决方案是定义一个专门针对不同类型的getTypeName模板功能,然后在您没有专业化时再使用typeid().name()

template <typename T>
std::string getTypeName()
{
    return typeid(T).name();
}

template <>
std::string getTypeName<int>()
{
    return "int";
}

template <>
std::string getTypeName<A>()
{
    return "A";
}

这将打印出来:

A 1B 1C int

然后您可以轻松地为其他类型添加特化。