函数模板的基本定义形式如下:
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);