欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > C++20的简写函数模板

C++20的简写函数模板

2025/3/12 18:56:10 来源:https://blog.csdn.net/Z_oioihoii/article/details/146097778  浏览:    关键词: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&)

此外,简写函数模板可以像普通函数模板一样进行特化。

示例代码

以下是一个简写函数模板的示例:

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; // 输出14std::cout << "Sum: " << get_sum(6, 8.8) << std::endl; // 输出14.8std::cout << "Sum2: " << get_sum2(6, 8) << std::endl; // 输出14std::cout << "Sum2: " << get_sum2(6, 8.8) << std::endl; // 输出14.8return 0;
}

在这个例子中,get_sum是一个简写函数模板,可以接受任意类型的参数并返回它们的和。get_sum2则使用了概念(Concept)来限制参数类型,确保它们是整数或浮点数。

优点

简写函数模板的主要优点是语法更加简洁,减少了模板声明的冗余,同时保持了类型安全和灵活性。

如果你对简写函数模板感兴趣,可以参考以下博客和教程:

  • C++20中的简写函数模板
  • Function template - cppreference.com

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词