刚刚学习c++ primer plus的模板函数那一节,自己试了一下,一直报错说:
显式专用化;“const char *maxn<char*>(const char *[],int)”不是函数模板的专用化
感觉这里的char*不能替换T,一用指针类型替换就出错,不知道为什么,求助
使用一段 行内代码。
代码片段
#include <iostream>
#include <cstring>
template <typename T>
const T maxn(const T arr[], int n) {
T max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
template <>
const char* maxn<char*>(const char* arr[], int n) {
const char* longest = arr[0];
size_t max_length = std::strlen(arr[0]);
for (int i = 1; i < n; i++) {
size_t current_length = std::strlen(arr[i]);
if (current_length > max_length) {
longest = arr[i];
max_length = current_length;
}
}
return longest;
}
int main() {
int intArray[] = { 1, 5, 3, 8, 2, 7 };
double doubleArray[] = { 3.2, 1.1, 6.4, 2.8 };
const char* stringArray[] = { "apple", "banana", "kiwi", "orange", "grape" };
std::cout << "Max of intArray: " << maxn(intArray, 6) << std::endl;
std::cout << "Max of doubleArray: " << maxn(doubleArray, 4) << std::endl;
std::cout << "Longest string: " << maxn(stringArray, 5) << std::endl;
return 0;
}