c++ - 用户定义的模板约束只接受一个用户定义的模板类

标签 c++ templates template-templates

有没有办法创建您自己的 enable_if 之类的条件?

我有一个模板类:Foo<int, int, int>我还有另一个采用类型的模板类:Template <T> class Bar .

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

是否有一种通过用户定义的 enable_if 来要求此约束的简洁明了的方法?有没有我没有考虑过的更好的方法?理想情况下,解决方案应该相对紧凑和清晰,可能采用 std::is_arithmetic 的工作方式。

感谢您的宝贵时间和建议。

最佳答案

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

template <typename> class Bar;

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

实例化 Bar类型是 Foo<...>会选择特化,而用任何其他类型对其进行实例化将进入死胡同,即 Bar<T> 的不完整类声明| .

关于c++ - 用户定义的模板约束只接受一个用户定义的模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47125757/

相关文章:

c++ - 模板类成员函数的默认参数

c++ - g++ 8.1 模板推导歧义,std 标志等于 c++17 第 2 部分

c++ - 模板类的多个模板模板参数

c++ - 虚拟多重继承

c++ - 子类坚持调用模板而不是构造函数

c++ - 将csv字符串读入 vector C++

python - 如何在调试python C扩展时设置断点并执行其他gdb命令

c++ - 将多个元组应用于同一个函数(即 `apply(f, tuples...)` )而不递归或 `tuple_cat`

c++ - 模板-模板参数给出神秘的类型/值不匹配

c++ - 使用可变参数模板进行类型推导和参数传递