如何打印类型列表??
这是我尝试过的+我的类型列表:
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的重复,我在哪里提到变量?
答案 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
然后您可以轻松地为其他类型添加特化。