【发布时间】:2016-08-21 19:04:16
【问题描述】:
我想做的是能够根据参数的值对同一个模板类进行不同的声明,如下所示:
// Enable if X == 2
template <int X, int W, typename Y,
typename A = int, typename B = int> struct Z {};
// Enable if X != 2
template <int X, typename Y,
typename A = int, typename B = int> struct Z {};
我可以这样开始:
template <int X, int W, typename Y, typename A = int, typename B = int,
typename = std::enable_if_t<X == 2>> struct Z {};
template <int X, typename Y, typename A = int, typename B = int,
typename = std::enable_if_t<X != 2>> struct Z {};
问题在于,可以理解的是,它已使用不同数量的参数重新声明。
可变参数模板功能可以派上用场,但不幸的是,它只支持类型而不支持字面量,就像本例一样。
template <typename... Args> struct Z {};
template <int X, int W, typename Y,
typename A = int typename B = int> struct Z<X, W, Y> {};
类型/值不匹配 -> 期望类型,得到 'X/W'
有人对此有解决方案吗?
编辑
对不起我之前没有提到,但很遗憾我不能改变参数的顺序,因为Y之后的其他参数都有默认值。
【问题讨论】:
-
这听起来像是一个 XY 问题。你到底想达到什么目标?
标签: c++ templates c++11 variadic-templates enable-if