Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Явная специализация функции

38K
30 октября 2009 года
kd0x13
38 / / 26.04.2009
Здравствуйте. Помогите разобраться с шаблонами. Вот написал код
Код:
char *s1 = new char[15];
    char *s2 = new char[15];
    cout << "Enter string 1: ";
    cin.getline(s1, 14);
    cout << "Enter string 2: ";
    cin.getline(s2, 14);

    cout << "----: " << (char*)getMax(s1, s2);

    delete[] s2;
    delete[] s1;

 
Код:
typedef const char *pCh;
template<> pCh getMaxS<pCh>(pCh, pCh);
...
template<> pCh getMaxS<pCh>(pCh s1, pCh s2){
    return strcmp(s1, s2) > 0 ? s1 : s2;
}


Ни как не могу найти ошибки. Как правильно?
12K
30 октября 2009 года
Ghox
297 / / 26.07.2009
Цитата: kd0x13
Здравствуйте. Помогите разобраться с шаблонами. Вот написал код


Я пока вижу такую ошибку:

 
Код:
cout << "----: " << (char*)getMax(s1, s2);

 
Код:
template<> pCh getMaxS<pCh>(pCh s1, pCh s2){
    return strcmp(s1, s2) > 0 ? s1 : s2;
}

Название вызываемой функции не совпадает с названием шаблонной функции.
Цитата: kd0x13
Ни как не могу найти ошибки.


А что у вас, собственно, за проблемы - программа не компилится, или компилится но неправильно работает? Если не компилится - то что за ошибки выдаются? Лучше сразу сообщать в чем проблема (например, что за ошибки выдаются), т.к. телепатов на форуме нет...

Цитата: kd0x13
Как правильно?


Зависит от того, каковы цели всего этого. Если вам просто нужно написать функцию, сравнивающую две строки и возвращающую наибольшую (с точки зрания функции strcmp) из них, то можно и без шаблонов обойтись...

38K
30 октября 2009 года
kd0x13
38 / / 26.04.2009
Мне надо именно с использованием такого шаблона.
Ошибки такие:
В прототипе шаблона - unrecognizable template declaration/definition и syntax error : '<'
В определении этой функции - syntax error : missing ';' before '<' и 'pCh getMaxS' : redefinition

Правильно ли я вобще шаблон написал?
12K
30 октября 2009 года
Ghox
297 / / 26.07.2009
А исходный шаблон (тот, который вы потом специализируете для случая когда переменная шаблона имеет ваш тип pCh) у вас в коде имеется?

Я попробовал запустить ваш код, поместив второй фрагмент (там где объявление и определение шаблона) перед первым (который поместил в main) - выдались те же ошибки.

Сделал вот так - работает:
Код:
#include <iostream>
#include <cstring>
using namespace std;

typedef const char *pCh;

// поскольку неспециализированный шаблон в этой программе нигде не вызывается,
// здесь можно поместить только его ообъявление:
template<typename T> T getMaxS(T t1, T t2);

template<> pCh getMaxS<pCh>(pCh, pCh);

template<> pCh getMaxS<pCh>(pCh s1, pCh s2){
    return strcmp(s1, s2) > 0 ? s1 : s2;
}

int main()
{
    char *s1 = new char[15];
    char *s2 = new char[15];
    cout << "Enter string 1: ";
    cin.getline(s1, 14);
    cout << "Enter string 2: ";
    cin.getline(s2, 14);

    // s1 и s2 нужно преобразовать к pCh, иначе произойдет
    // попытка вызова неспециализированного шаблона
    cout << "----: " << (char*)getMaxS((pCh)s1, (pCh)s2);

    delete[] s2;
    delete[] s1;
}
38K
30 октября 2009 года
kd0x13
38 / / 26.04.2009
Спасибо Вам Ghox, я сначала не понял, что надо еще писать исходный шаблон, я его тупо не написал))))) Таперь разобрался, все работает, благодарю
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог