性状特化
Traits specialization
我想在trait specialization中定义一种存储类型。但对于某些情况,我没有任何真正的定义,即没有用于某些专业化的存储类型。当然,使用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
*/
}
在没有意义的地方省略storage
typedef:
template<>
struct Traits<TypeC>
{
};
现在Traits<TypeC>::storage
的使用变成了一个错误,因为它没有命名类型。
其他注意事项:
struct
声明/定义后需要分号- 您的
Traits
模板(而不是专门化)应该没有正文,除非有一个对每种类型都有意义的正文。也就是说,它应该是template <typename> struct Traits;
。这将导致将其与一个没有意义的模板参数一起使用,从而导致错误
相关文章:
- 没有找到相关文章