c++通过构造函数选择推导出bool类模板参数

我试图通过选择类构造函数来推导出 bool 模板参数。一个简单的例子:

template <typename A, bool Condition>
class Subrange {
    public:
    Subrange(A a) requires (not Condition); /* create Subrange<A, false> */
    Subrange(A a, int b) requires (Condition); /* create Subrange<A, true> */
};

这甚至可能还是必须在构造函数上明确指定条件?
PS:条件不依赖于A。

回答

您可以为类模板参数推导 (CTAD)(C++17 起)定义用户定义的推导指南:

template<typename A> Subrange(A a) -> Subrange<A, false>;
template<typename A> Subrange(A a, int b) -> Subrange<A, true>;

然后

Subrange s1(0);    // -> Subrange<int, false>
Subrange s2(0, 0); // -> Subrange<int, true>


以上是c++通过构造函数选择推导出bool类模板参数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>