检查模板类型是否在可用类型列表中

时间:2015-06-12 12:55:11

标签: c++ templates c++98

我有一个模板类Foo。我编写了模板以避免代码的大量重复,但此类必须仅用于某些特定的其他类。

如何在没有C ++ 11的情况下检查?

目前,我要编写的解决方案是这样的:

template <typename T> inline
bool is_type_available() { return false; }
template <> inline
bool is_type_available<Bar>() { return true; }
template <> inline
bool is_type_available<Baz>() { return true; }

template <typename T>
class Foo
{
  public:
    Foo() { assert(is_type_available<T>()); }
};

我觉得它并不那么难看,但我希望能有更好的东西存在。

1 个答案:

答案 0 :(得分:2)

使用Boost库(仅限标题):

例如,

BOOST_STATIC_ASSERT(boost::is_same<T, Bar>::value || boost::is_same<T, Baz>::value);

如果支持的类型列表较长,请为它们提供单个基类并使用特征is_base_of或检查boost MPL库