Шаблоны. Спецализации. С++

223
18 ноября 2017, 12:05

Привет. Изучаю 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;
}
Answer 1

Может, так?

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);
}

Правда, по заданию функция должна возвращать, а не выводить, но это уже детали...

READ ALSO
Как очистить массив через template?

Как очистить массив через template?

Можно ли вместо ZeroMemory(x,sizeof(x)) использовать Zero(x)?

262
Реализация функций-геттеров

Реализация функций-геттеров

Как корректно реализовывать функции-геттеры? Я имею ввиду возвращаемое значениеТак:

197