特质专业化

时间:2014-11-10 21:37:01

标签: c++ typetraits

我想在特征特化中定义一个存储类型。但是对于某些情况,我没有任何真正定义的东西,即某些特殊化没有存储类型。当然使用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
    */
}

1 个答案:

答案 0 :(得分:2)

只需省略storage typedef,它没有意义:

template<>
struct Traits<TypeC>
{
};

现在使用Traits<TypeC>::storage会出错,因为它没有为类型命名。

其他说明:

  • struct声明/定义后,您需要使用分号。
  • 你的Traits模板(不是专业化)应该没有正文,除非有一个对每种类型都有意义的。也就是说,它应该是template <typename> struct Traits;。这将导致使用模板参数,这不会导致错误。