Форум программистов, компьютерный форум CyberForum.ru

Специализация шаблона для char * (рабочий код, но непонятно почему) - C++

Восстановить пароль Регистрация
 
vlad3996
6 / 6 / 3
Регистрация: 27.10.2013
Сообщений: 14
17.03.2014, 16:49     Специализация шаблона для char * (рабочий код, но непонятно почему) #1
Явное определение специализации – это такое определение, в котором за ключевым словом template
следует пара угловых скобок <>, а за ними –определение специализированного шаблона:
C++
1
2
3
template <> тип_возврата 
функция <параметры шаблона>
(параметры_функции) {реализация}
Тогда почему код работает, когда в параметре шаблона стоит char ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
using namespace std;
template <class T>
void obmen( T*a, T*b) 
{
    T c;
    c=a;
    a=b;
    b=c;
}
template<> void obmen <char*>( char * a, char * b )  //если поменять на <char>, то всё работает
{
    
    if(strlen(a)==strlen(b))
    {
        char *c=new char[strlen(a)+1];
        strcpy(c,a);
        strcpy(a,b);
        strcpy(b,c);
    }
    else cout<<"Длины не равны!!!"<<endl;
}
 
void main()
{
    setlocale(0,"");
    int a1=3,b1=4;
    char *a=new char [255];
    char *b=new char [255];
    char c[]="11111";
    char d[]="22222";
    cin>>a>>b;
    obmen(a,b);
    obmen(c,d);
    cout<<endl<<a<<endl<<b<<endl;
    cout<<endl<<c<<endl<<d<<endl;
    system("pause");
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2014, 16:49     Специализация шаблона для char * (рабочий код, но непонятно почему)
Посмотрите здесь:

C++ Почему не срабатывает специализация шаблона?
C++ Почему не создается специализация шаблона функции
C++ Специализация шаблона
C++ специализация шаблона
Специализация шаблона C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11830 / 6809 / 769
Регистрация: 27.09.2012
Сообщений: 16,882
Записей в блоге: 2
Завершенные тесты: 1
17.03.2014, 17:16     Специализация шаблона для char * (рабочий код, но непонятно почему) #2
Специализация не соответствует шаблону.

Сделайте такой шаблон, например
C++
1
2
3
4
5
6
7
8
template <class T>
void obmen( T a, T b)
{
    T c;
    c=a;
    a=b;
    b=c;
}
vlad3996
6 / 6 / 3
Регистрация: 27.10.2013
Сообщений: 14
17.03.2014, 17:17  [ТС]     Специализация шаблона для char * (рабочий код, но непонятно почему) #3
Тогда сам шаблон перестанет работать т.к. значение не по ссылке передается или указателю передаётся =(

upd. а ( T &a, T &b) - та же ошибка
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11830 / 6809 / 769
Регистрация: 27.09.2012
Сообщений: 16,882
Записей в блоге: 2
Завершенные тесты: 1
17.03.2014, 17:31     Специализация шаблона для char * (рабочий код, но непонятно почему) #4
перегрузите функцию и всё:
C++
1
2
3
void obmen( char * a, char * b ){
//...
}
DrOffset
6429 / 3803 / 882
Регистрация: 30.01.2014
Сообщений: 6,601
17.03.2014, 19:18     Специализация шаблона для char * (рабочий код, но непонятно почему) #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от vlad3996 Посмотреть сообщение
Тогда сам шаблон перестанет работать т.к. значение не по ссылке передается или указателю передаётся
То есть хочешь сказать, что такой код не работает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <class T>
void obmen(T a, T b)
{
    T c;
    c=a;
    a=b;
    b=c;
}
template<>
void obmen <char*>(char * a, char * b )
{
    //....
}
Добавлено через 5 минут
Цитата Сообщение от vlad3996 Посмотреть сообщение
C++
1
template<> void obmen <char*>( char * a, char * b ) *//если поменять на <char>, то всё работает
А в чем собственно проблема? Поменяй и работай спокойно.
У тебя у основного шаблона задано
C++
1
T * a, T * b
Если заменить T = char, то как раз и получится char * - искомая специализация. Если же, как у тебя, заменять T = char *, то специализация будет уже такой - char **.
vlad3996
6 / 6 / 3
Регистрация: 27.10.2013
Сообщений: 14
17.03.2014, 19:31  [ТС]     Специализация шаблона для char * (рабочий код, но непонятно почему) #6
DrOffset, спасибо, разобрался =)
Действительно получается char** если использовать ту специализацию
Yandex
Объявления
17.03.2014, 19:31     Специализация шаблона для char * (рабочий код, но непонятно почему)
Ответ Создать тему
Опции темы

Текущее время: 11:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru