性状特化

Traits specialization

本文关键字:      更新时间:2023-10-16

我想在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;。这将导致将其与一个没有意义的模板参数一起使用,从而导致错误
相关文章:
  • 没有找到相关文章