admin管理员组文章数量:1037775
C++20的简写函数模板
C++20引入了简写函数模板(Abbreviated Function Template),这是一种更简洁的函数模板声明方式,允许使用auto
或带有约束的auto
来代替显式的模板参数声明。
简写函数模板的语法
当在函数参数列表中使用auto
或带有约束的auto
时,编译器会自动为每个占位符生成一个虚构的模板参数。例如:
void f1(auto); // 等价于 template <class T> void f1(T);
void f2(C1 auto); // 等价于 template <C1 T> void f2(T),如果C1是一个概念(Concept)
void f3(C2 auto...); // 等价于 template <C2... Ts> void f3(Ts...)
void f4(const C3 auto*, C4 auto&); // 等价于 template <C3 T, C4 U> void f4(const T*, U&)
此外,简写函数模板可以像普通函数模板一样进行特化。
示例代码
以下是一个简写函数模板的示例:
代码语言:cpp代码运行次数:0运行复制namespace {
auto get_sum(auto a, auto b) {
return a + b;
}
template <typename T>
concept IntegralOrFloating = std::is_integral_v<T> || std::is_floating_point_v<T>;
auto get_sum2(IntegralOrFloating auto a, IntegralOrFloating auto b) {
return a + b;
}
}
int main() {
std::cout << "Sum: " << get_sum(6, 8) << std::endl; // 输出14
std::cout << "Sum: " << get_sum(6, 8.8) << std::endl; // 输出14.8
std::cout << "Sum2: " << get_sum2(6, 8) << std::endl; // 输出14
std::cout << "Sum2: " << get_sum2(6, 8.8) << std::endl; // 输出14.8
return 0;
}
在这个例子中,get_sum
是一个简写函数模板,可以接受任意类型的参数并返回它们的和。get_sum2
则使用了概念(Concept)来限制参数类型,确保它们是整数或浮点数。
优点
简写函数模板的主要优点是语法更加简洁,减少了模板声明的冗余,同时保持了类型安全和灵活性。
如果你对简写函数模板感兴趣,可以参考以下博客和教程:
- C++20中的简写函数模板
- Function template - cppreference
C++20的简写函数模板
C++20引入了简写函数模板(Abbreviated Function Template),这是一种更简洁的函数模板声明方式,允许使用auto
或带有约束的auto
来代替显式的模板参数声明。
简写函数模板的语法
当在函数参数列表中使用auto
或带有约束的auto
时,编译器会自动为每个占位符生成一个虚构的模板参数。例如:
void f1(auto); // 等价于 template <class T> void f1(T);
void f2(C1 auto); // 等价于 template <C1 T> void f2(T),如果C1是一个概念(Concept)
void f3(C2 auto...); // 等价于 template <C2... Ts> void f3(Ts...)
void f4(const C3 auto*, C4 auto&); // 等价于 template <C3 T, C4 U> void f4(const T*, U&)
此外,简写函数模板可以像普通函数模板一样进行特化。
示例代码
以下是一个简写函数模板的示例:
代码语言:cpp代码运行次数:0运行复制namespace {
auto get_sum(auto a, auto b) {
return a + b;
}
template <typename T>
concept IntegralOrFloating = std::is_integral_v<T> || std::is_floating_point_v<T>;
auto get_sum2(IntegralOrFloating auto a, IntegralOrFloating auto b) {
return a + b;
}
}
int main() {
std::cout << "Sum: " << get_sum(6, 8) << std::endl; // 输出14
std::cout << "Sum: " << get_sum(6, 8.8) << std::endl; // 输出14.8
std::cout << "Sum2: " << get_sum2(6, 8) << std::endl; // 输出14
std::cout << "Sum2: " << get_sum2(6, 8.8) << std::endl; // 输出14.8
return 0;
}
在这个例子中,get_sum
是一个简写函数模板,可以接受任意类型的参数并返回它们的和。get_sum2
则使用了概念(Concept)来限制参数类型,确保它们是整数或浮点数。
优点
简写函数模板的主要优点是语法更加简洁,减少了模板声明的冗余,同时保持了类型安全和灵活性。
如果你对简写函数模板感兴趣,可以参考以下博客和教程:
- C++20中的简写函数模板
- Function template - cppreference
本文标签: C20的简写函数模板
版权声明:本文标题:C++20的简写函数模板 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1748349491a2288903.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论