我想将模板类型的数量限制为小于 3。我期望 F(1,2,3)
没有编译,但它实际上编译了并打印了 3。
template <typename ...Ts>
concept LessThan3 = requires {
sizeof...(Ts) < 3;
};
template <typename... Ts>
requires LessThan3<Ts...>
void F(Ts... ts) {
cout << sizeof...(ts);
};
int main() {
F(1, 2, 3); // Compile
}
但是,如果我明确输入 sizeof...(Ts) < 3
在函数声明中,F(1,2,3)
无法编译,按预期工作。
template <typename... Ts>
requires(sizeof...(Ts) < 3) void F(Ts... ts) {
void F(Ts... ts) {
cout << sizeof...(ts);
};
// F(1,2,3) doesn't compile, expected.
require
的正确方法是什么?一个概念?
最佳答案
要添加到其他人的答案中,您实际上可以通过执行以下操作来简化您的概念要求:
template <size_t Size>
concept LessThan3 = (Size < 3);
template <typename... Ts>
requires LessThan3<(sizeof...(Ts))>
void F(Ts... ts) {
std::cout << sizeof...(ts);
};
您会发现,如果传递两个参数,它就会起作用。但是,如果大于 2,则会出现编译错误,表明它不满足 LessThan3。
关于C++ 要求模板变量数量小于 N,但失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76696331/