c++ 11 学习 函数模板

函数模板的基本定义形式如下:

cpp 复制代码
template <template-parameter-list>
return-type function-name (parameter-list) {
    // 函数体
}
template <template-parameter-list>:模板参数列表,可以包含类型参数和非类型参数。
return-type:返回值类型。
function-name:函数名。
parameter-list:函数参数列表。

模板参数为:非类型参数 例子

cpp 复制代码
// Convert string to char array
template <size_t N> inline void StringToCharArray(const string& src, char (&dest)[N]) {
    if (src.empty()) {
        dest[0] = '\0';
        return;
    }

    strncpy(dest, src.c_str(), N - 1);
    dest[N - 1] = '\0';
}

在C++的 StringToCharArray 函数模板中,size_t N不需要显式传入‌。

这是因为模板参数 N 可以通过‌模板参数推导‌(Template Argument Deduction)由编译器自动推断出来。

具体来说,char (&dest)[N] 是一个引用类型的形参,它表示一个大小为 N 的字符数组的引用。当调用该函数时,编译器会根据传入的数组大小自动推导出 N 的值。

在C++中 size_t N 可以作为模板参数,而且这是一种非常常见的用法。这种参数被称为‌非类型模板参数‌(Non-Type Template Parameter)。

非类型模板参数允许你在模板中使用常量值,而不是类型。size_t 是一个无符号整数类型,常用于表示对象的大小或数量,因此它非常适合用作非类型模板参数。

cpp 复制代码
std::string src = "Hello";
char dest[10];
StringToCharArray(src, dest);
相关推荐
零涂毕业设计7 分钟前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
tedcloud12318 分钟前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
SakitamaX35 分钟前
LVS(Linux Virtual Server)概念详解
linux·运维·lvs
小张同学a.44 分钟前
Linux系统管理
linux·运维
孫治AllenSun1 小时前
【DataX】生产环境搭建DataX集群案例
java·开发语言·jvm
阿龙的工作记录1 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
代码村新手2 小时前
Linux的基本指令
linux·运维·服务器
一拳一个呆瓜2 小时前
【STL】iostream 编程:检测提取操作产生的错误
c++·stl
稚南城才子,乌衣巷风流2 小时前
判断素数与拓展应用
c++
众少成多积小致巨2 小时前
C++ 规范参考(下)
c++