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。
您可以为类模板参数推导 (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)