Привет. Изучаю C++(книга: С. Прата). Есть задача.
Есть код, который не работает из-за (я знаю что вариант char*[] неправильный.) Если его опустить то код работает без ошибок.
Но как будет правильнее? Опустить скобки <> или нет? И если ответ на предыдущий вопрос нет, то что писать в <>?
Вот код.
#include <iostream>
#include <cstring>
template <typename T>
void maxn(T *, unsigned int);
template <> void maxn<char*[]>(char *array[], unsigned int n)
{
char *p = array[0];
for (int i = 1; i < n; ++i)
{
if (strlen(p) < strlen(array[i]))
p = array[i];
}
std::cout << std::endl << "Line: " << p << " & Length: " << strlen(p);
}
int main()
{
int arr_int[] = {3, 8, 0 ,9};
maxn(arr_int, 4);
double arr_double[] = {2.56, 0, 1, 3.567, 41.7, 7.87};
maxn(arr_double, 6);
char *p[] = {
".....................",
".................................",
".............",
"**********************",
"^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
};
maxn(p, 5);
return 0;
}
template <typename T>
void maxn(T * arr, unsigned int n)
{
T highest = arr[0];
for (int i = 1; i < n; ++i)
{
if (highest < arr[i])
highest = arr[i];
}
std::cout << std::endl << highest;
}
Может, так?
template<>
void maxn<char*>(char **array, unsigned int n)
{
char *p = array[0];
for (unsigned int i = 1; i < n; ++i)
{
if (strlen(p) < strlen(array[i]))
p = array[i];
}
std::cout << std::endl << "Line: " << p << " & Length: " << strlen(p);
}
Правда, по заданию функция должна возвращать, а не выводить, но это уже детали...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Можно ли вместо ZeroMemory(x,sizeof(x)) использовать Zero(x)?
Как корректно реализовывать функции-геттеры? Я имею ввиду возвращаемое значениеТак: