我想在特征特化中定义一个存储类型。但是对于某些情况,我没有任何真正定义的东西,即某些特殊化没有存储类型。当然使用void类型不是方法,但我正在寻找类似的东西。我不确定我是否正朝着正确的方向前进 - 一种方法是使用布尔类型,因为它占用的空间最小。什么是克服这个问题的正确/好方法。我不确定是否有这样的问题。我不知道该搜索什么!
template<typename T>
struct Traits
{
}
template<>
struct Traits<TypeA>
{
typedef std::vector<double> storage;
}
template<>
struct Traits<TypeB>
{
typedef std::vector<string> storage;
}
template<>
struct Traits<TypeC>
{
//I do not want to specify a storage type here. More like it does not exist.
//So what is the correct way to define such a type
typedef ??void?? storage;
}
int main()
{
typename Traits<TypeA>::storage myType;
/*
do domething
*/
}
答案 0 :(得分:2)
只需省略storage
typedef,它没有意义:
template<>
struct Traits<TypeC>
{
};
现在使用Traits<TypeC>::storage
会出错,因为它没有为类型命名。
其他说明:
struct
声明/定义后,您需要使用分号。Traits
模板(不是专业化)应该没有正文,除非有一个对每种类型都有意义的。也就是说,它应该是template <typename> struct Traits;
。这将导致使用模板参数,这不会导致错误。