给定一个采用两个策略模板参数的类:
template<typename PolicyA, typename PolicyB>
class widget;
以及以下可用的策略类 A1、A2、A3、B1、B2、B3。如何传达 1s 和 2s 相互兼容但 A3 仅与 B3 兼容?也就是说,只允许以下实例化:
widget<A1, B1> w11; // All valid.
widget<A1, B2> w12;
widget<A2, B1> w21;
widget<A2, B2> w22;
widget<A3, B3> w33;
// No other combination allowed.
我在专业化中使用 std::enable_if 的失败尝试遇到了编译错误:
template<typename A, typename B>
class<A3, enable_if<is_same<B, B3>::value, B3>::type>
{};