将约束的结合应用到参数包
Apply a conjunction of constraints to a parameter pack
给定一个简单的 variadoc 模板
template<typename... T>
class A {};
以及两个或更多概念 C1
和 C2
,例如
template<typename T>
concept bool C1() { ... };
如何在 A
参数包的所有元素上应用 C1
和 C2
的连词,例如:
template<typename... T>
requires C1<T>... || C2<T>... // nok
class A {};
以上无法编译。我正在寻找一种方法来指定它,而无需编写像 C1orC2
.
这样的新概念
您可以为此嵌套折叠表达式:
template<typename... T>
requires ((C1<T> || C2<T>) || ...)
class A {};
另外,实际的概念应该是这样的形式:
template<typename T>
concept C1 = requires(T arg) {
// something
};
给定一个简单的 variadoc 模板
template<typename... T>
class A {};
以及两个或更多概念 C1
和 C2
,例如
template<typename T>
concept bool C1() { ... };
如何在 A
参数包的所有元素上应用 C1
和 C2
的连词,例如:
template<typename... T>
requires C1<T>... || C2<T>... // nok
class A {};
以上无法编译。我正在寻找一种方法来指定它,而无需编写像 C1orC2
.
您可以为此嵌套折叠表达式:
template<typename... T>
requires ((C1<T> || C2<T>) || ...)
class A {};
另外,实际的概念应该是这样的形式:
template<typename T>
concept C1 = requires(T arg) {
// something
};