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>