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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
vlad3996
6 / 6 / 3
Регистрация: 27.10.2013
Сообщений: 14
#1

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

17.03.2014, 16:49. Просмотров 341. Ответов 5
Метки нет (Все метки)

Явное определение специализации – это такое определение, в котором за ключевым словом 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++
#include &lt;iostream&gt; #include &lt;clocale&gt; using namespace std; struct box { char mak; float m; float n; float y; float...

Почему не создается специализация шаблона функции - C++
Почему это не работает и как правильно определить operator&lt;&lt; вне тела класса? #include &lt;iostream&gt; using namespace std; template...

Специализация шаблона для стандартных типов - C++
Пишу динамическую структуру данных (не суть важно какую, допустим для простоты стек). Она работает с объектами типа Box, которые: 1....

Явная специализация шаблона для пользовательского типа - C++
Здравствуйте! Сразу извиняюсь если вопрос покажется глупым, перечитал справочник по шаблонам, но так и не нашёл ответ. Есть шаблон класса: ...

специализация шаблона - C++
начал разбираться с шаблонами. если есть структура, и одна функция именно с int должна работать по особенному, написать можно вот так. ...

Специализация шаблона - C++
Пытаюсь специализировать шаблон для типа float, но не получается. В чем проблема? Компилятор: 1&gt;TemplateArr.obj : error LNK2005:...

Специализация шаблона - C++
Здравствуйте! Задача: Создайте шаблонную функцию maxn(), которая принимает в качестве аргумента массив элементов типа Т и целое...

Специализация шаблона - C++
Привет, у меня есть вот такой шаблон дерева: template &lt;typename T = int&gt; class Tree{ struct TreeItem{ // элемент дерева ...

Частичная специализация шаблона - C++
Доброго всем времени суток! Помогите разобраться в следующей ситуации. Есть шаблон класса #include &lt;iostream&gt; using...

специализация шаблона функции - C++
Как сделать специализированную функцию шаблон на тип int? У меня что-то не получается ..

Специализация операции шаблона - C++
Доброго времени суток. Имеется шаблон: template&lt;class Type&gt;class Figures { /*...*/ public: /*...*/ void...

Специализация шаблона класса - C++
Имеется задание: Создать свой шаблонный класс – динамический массив (myvector). Создать методы этого класса. Инстанцировать для своего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
17.03.2014, 17:31     Специализация шаблона для char * (рабочий код, но непонятно почему) #4
перегрузите функцию и всё:
C++
1
2
3
void obmen( char * a, char * b ){
//...
}
DrOffset
6920 / 4113 / 941
Регистрация: 30.01.2014
Сообщений: 6,908
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 * (рабочий код, но непонятно почему)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru