Gon*_*n I 23 c++ variadic-templates c++-concepts fold-expression c++20
如何使用 C++20 概念限制可变参数模板和折叠表达式中允许的类型?
例如,假设我想限制以下折叠表达式仅支持整数类型,我该怎么做?
#include <string>
#include <iostream>
#include <concepts>
using namespace std;
template<typename... Args> // requires (is_integral<Args>::value )
int sum(Args... args) { return (... + args); }
int main()
{
cout << sum(1,2,3);
}
Run Code Online (Sandbox Code Playgroud)
Hol*_*Cat 31
使其工作的最小改变是:
requires (std::is_integral<Args>::value && ...)
Run Code Online (Sandbox Code Playgroud)
我还建议使用不太冗长的内容is_integral_v<...>而不是is_integral<...>::value.
或者,更好的是,有一个概念:
template <std::integral ...Args> // no requires needed
Run Code Online (Sandbox Code Playgroud)
康桓瑋*_*康桓瑋 24
您可以使用类型约束 auto语法:
int sum(std::integral auto... args) { return (... + args); }
Run Code Online (Sandbox Code Playgroud)