Я пишу программу, которая требует функции шаблона, имеющей массив элементов, и количество элементов в этом массиве в качестве аргументов. Функция должна вернуть самый большой элемент в указанном массиве. Программа также должна иметь специализацию (с чем у меня возникают проблемы), которая проверяет самую длинную строку в массиве, если введен массив строк.Явная специализация: синтаксическая ошибка?
Вот мои прототипы:
template <typename T>
T compare(T const arr1[], int n);
template <> const char *compare<const char *>(const char *const arr2[][3], int n);
основной программы ..
int main()
{
int a[7] = { 3, 67, 100, 91, 56, 67, 83 };
double b[] = { 2.5, 2.6102, 2.61, 1.03 };
//char* c[3] = { "see if this works", "functions", "explicit specialization" };
char c0[30] = { "see if this works" };
char c1[30] = { "functions" };
char c2[30] = { "explicit specialization" };
char *d[][3] = { c0, c1, c2 };
cout << "Comparing int values: " << endl;
cout << "Largest int value is: " << compare(a, 7) << endl;
cout << "Comparing double values: " << endl;
cout << "Largest double value is: " << compare(b, 4) << endl;
return 0;
}
определение функции ...
template <typename T>
T compare(T const arr1[], int n) {
T temp;
........
return temp;
}
template <> const char *compare<const char *>(const char *const arr2[][3], int n); {
const char *temp2 = &arr2[0];
return *temp2;
}
Я написал фиктивный код, чтобы проверить, является ли второй функции работает, но он не возвращает правильное значение (он возвращает «явную специализацию»). Может кто-то указать вне меня, что случилось с синтаксисом?
Когда вы думаете, что вы хотите, чтобы полностью специализировать шаблон функции, что вы действительно хотите, чтобы перегружать его с непостоянным функция шаблона. Полностью специализация - это то, что вы делаете для классов шаблонов, а не для шаблонов. – JSF
Спасибо. В настоящее время я просматриваю упражнения книги, и инструкции должны включать специализацию для проверки самой длинной строки. – mi5tch