C++ 将约束的连接应用于参数包
给出了一个简单的文档模板C++ 将约束的连接应用于参数包,c++,variadic-templates,c++-concepts,c++20,C++,Variadic Templates,C++ Concepts,C++20,给出了一个简单的文档模板 template<typename... T> class A {}; 如何在a的参数包的所有元素上应用C1和C2的连词,如: template<typename... T> requires C1<T>... || C2<T>... // nok class A {}; 模板 需要C1…||C2…//诺克 A类{}; 以上内容无法编译。我正在寻找一种方法来指定这一点,而无需编写新概念,如C1orC2您可以为
template<typename... T>
class A {};
如何在a
的参数包的所有元素上应用C1
和C2
的连词,如:
template<typename... T>
requires C1<T>... || C2<T>... // nok
class A {};
模板
需要C1…||C2…//诺克
A类{};
以上内容无法编译。我正在寻找一种方法来指定这一点,而无需编写新概念,如
C1orC2
您可以为此嵌套折叠表达式:
template<typename... T>
requires ((C1<T> || C2<T>) || ...)
class A {};
模板
需要((C1 | | C2)| |……)
A类{};
此外,实际概念的形式应为:
template<typename T>
concept C1 = requires(T arg) {
// something
};
模板
概念C1=要求(T参数){
//某物
};
我想您刚刚搞错了折叠表达式语法。它是(C1 | |…)| |(C2 | |…)
。如果您的意思是参数包应该作为一个整体应用C1 | | C2
我在制定概念时犯了一个错误,经过编辑。很抱歉,但我在制定概念时犯了一个错误(它不是可变的),请参见上面的内容。@wimalopaan好的,我修复了它。下次小心:)再次抱歉。作品但是如果您使用像我这样的函数概念,请确保在fold表达式中的约束调用中包含()
。@wimalopan不要这样。我宁愿使用即将成为官方的:)或((C1 | | C2)| |…)
否?
template<typename T>
concept C1 = requires(T arg) {
// something
};