用户定义的模板约束仅接受用户定义的模板类

时间:2017-11-05 19:34:47

标签: c++ templates template-templates

有没有办法创建自己的enable_if like condition?

我有一个模板类:Foo<int, int, int>我有另一个模板类,其类型为:Template <T> class Bar

我想约束Bar类,使得它所采用的类型可能只是Foo类专门化中的任何一个。例如,可以采用Foo<0, 0 ,1>但不能采用int类型。

是否有通过用户定义的enable_if要求此约束的简短方法?有没有更好的方法我还没考虑过?理想情况下,解决方案相对紧凑和清晰,可能与std :: is_arithmetic的工作方式相同。

感谢您的时间和建议。

1 个答案:

答案 0 :(得分:1)

无需提取任何库类型。最简单的方法是一个很好的旧专业化:

template <typename> class Bar;

template<int a, int b, int c>
class Bar<Foo<a, b, c>> {
  // Define `Bar`
};

使用Bar类型实例化Foo<...>会选择特化,而使用任何其他类型实例化它将会触及Bar<T>的不完整类声明的死角。