3

我试图通过选择类构造函数来推断一个 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> */
};

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

4

1 回答 1

7

您可以将类模板参数推导 (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>
于 2021-05-25T16:19:27.807 回答