如cppreference中所示。
关键字auto
可以用来摆脱模板concept
。
// Constrained C++20 function template:
template<Hashable T>
void f(T) {}
//
// Alternative ways to apply the same constraint:
// template<typename T>
// requires Hashable<T>
// void f(T) {}
//
// template<typename T>
// void f(T) requires Hashable<T> {}
//
void f(Hashable auto /* parameter-name */) {}
我的问题是当我有两个模板参数时如何使用相同的技术auto
。
template<typename T1, typename T2> concept MyConcept<T1, T2> = ....
template<typename T1, typename T2>
void func(MyConcept<T1, T2> c) { ... }
// Why cannot use :
void func(MyConcept auto c) { ... }
你不需要。这种语法只适用于最简单的情况。当一个概念基于单个类型模板参数时,可以假设该类型是参数的推导类型(如果不是,那么你无论如何都必须做不同的事情)。但是当一个概念基于多个参数时,哪一个是参数的类型,另一个类型来自哪里?
您必须用适当的
requires
条款以详细形式拼写出来。