我有一个模板类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>()); }
};
我觉得它并不那么难看,但我希望能有更好的东西存在。
答案 0 :(得分:2)
使用Boost库(仅限标题):
BOOST_STATIC_ASSERT(boost::is_same<T, Bar>::value || boost::is_same<T, Baz>::value);
如果支持的类型列表较长,请为它们提供单个基类并使用特征is_base_of或检查boost MPL库