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

Les*_*ssi 3 c++ templates template-argument-deduction c++17 ctad

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

Run Code Online (Sandbox Code Playgroud)

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

son*_*yao 7

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

template<typename A> Subrange(A a) -> Subrange<A, false>;
template<typename A> Subrange(A a, int b) -> Subrange<A, true>;
Run Code Online (Sandbox Code Playgroud)

然后

Subrange s1(0);    // -> Subrange<int, false>
Subrange s2(0, 0); // -> Subrange<int, true>
Run Code Online (Sandbox Code Playgroud)