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

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

Войти
Регистрация
Восстановить пароль
 
zhundik
0 / 0 / 0
Регистрация: 12.03.2014
Сообщений: 55
#1

Не могу создать специализацию шаблона ф-ции - C++

03.07.2015, 17:41. Просмотров 184. Ответов 2
Метки нет (Все метки)

Добрый день! Помогите с такими вопросом, не получается создать явную специализацию шаблона , при компиляции кидает с ошибкой в шаблон т.к., он не подходит под вызываемую ф-цию
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
#include <iostream>
using namespace std;
 
struct box // структура
{
    char maker[40];
    float h;
    float w;
    float l;
    float v;
}test
{"sozdatel", 123, 100, 50, 33 },
red{"trudovik", 345,12,67,89};
 
template <typename T> // шаблон для возвращения наибольшего из аргументов
T ver(T a, T b);
 
template <> box & ver ( box& a, box & b);// явная специализация для структрур
 
 
 
int main()
{
    cout << ver (3, 6);
    box y = ver (test , red);
 
 
}
 
template <typename T> // шаблон для возвращения наибольшего из аргументов
T ver(T a, T b)
{
    if (a>b) return a;
    else return b;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2015, 17:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу создать специализацию шаблона ф-ции (C++):

Не получается создать специализацию шаблона класса - C++
Подскажите пожалуйста в чем ошибка. Я гуглил по кодам ошибок, но не смог понять в чем дело. Заголовочный файл: #ifndef ARRAY_H ...

Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей - C++
Нужно создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей. Эта специализация...

Почему я не попадаю в специализацию шаблона? - C++
Почему я не попадаю в специализацию шаблона? template&lt;&gt; box&amp; max(box&amp;, box&amp;); #include&lt;iostream&gt; struct box { char...

Передача ф-ции как параметра другой ф-ции - C++
struct pupil{ char surname; int school; int answer; int num; } tmp, a; int usl(int i, pupil a) { }

Компилятор не использует явную специализацию - C++
Здравствуйте. У меня возникла проблема и я никак не могу её решить. У меня есть шаблон и явная специализация. Компилятор не видит явной...

Создать строку, заполненную повторяющимися копиями строки-шаблона - C++
Описать функцию FillStr(S, Len) строкового типа, возвращающую строку длины Len, заполненную повторяющимися копиями строки-шаблона S...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6361 / 5925 / 1921
Регистрация: 18.12.2011
Сообщений: 15,231
Завершенные тесты: 1
03.07.2015, 17:55 #2
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
#include <iostream>
using namespace std;
 
struct box // структура
{
    char maker[40];
    float h;
    float w;
    float l;
    float v;
    bool operator>(const box& bb)// определить как сравнивать структуры box
    { 
        return h>bb.h;
    }
};
box test={"sozdatel", 123, 100, 50, 33 };
box red={"trudovik", 345,12,67,89};
 
template <typename T> // шаблон для возвращения наибольшего из аргументов
T ver(T a, T b)
{
    if (a>b) return a;
    else return b;
}
 
//template <> box & ver ( box& a, box & b);// явная специализация для структрур
  
int main()
{
    cout << ver (3, 6);
    box y = ver (test , red);
    retun 0;
}
zhundik
0 / 0 / 0
Регистрация: 12.03.2014
Сообщений: 55
03.07.2015, 18:45  [ТС] #3
zss, а по другому ни как не получится сделать?!
такое мне пока что не особо понятно)) Да и специализации только начал делать =)
Чтобы что-то типа этого получилось: просто тут работает , а там нет((
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// twoswap.cpp -- specialization overrides a template
#include <iostream>
template <typename T>
void Swap(T &a, T &b);
 
struct job
{
    char name[40];
    double salary;
    int floor;
};
 
// explicit specialization 
template <> void Swap<job>(job &j1, job &j2);
void Show(job &j);
 
int main()
{
    using namespace std;
    cout.precision(2);
    cout.setf(ios::fixed, ios::floatfield);
    int i = 10, j = 20;
    cout << "i, j = " << i << ", " << j << ".\n";
    cout << "Using compiler-generated int swapper:\n";
    Swap(i,j);    // generates void Swap(int &, int &)
    cout << "Now i, j = " << i << ", " << j << ".\n";
 
    job sue = {"Susan Yaffee", 73000.60, 7};
    job sidney = {"Sidney Taffee", 78060.72, 9};
    cout << "Before job swapping:\n";
    Show(sue);
    Show(sidney);
    Swap(sue, sidney); // uses void Swap(job &, job &)
    cout << "After job swapping:\n";
    Show(sue);
    Show(sidney);
    // cin.get();
    return 0;
}
 
template <typename T>
void Swap(T &a, T &b)    // general version
{
    T temp;
    temp = a;
    a = b;
    b = temp;
}
 
// swaps just the salary and floor fields of a job structure
 
template <> void Swap<job>(job &j1, job &j2)  // specialization
{
    double t1;
    int t2;
    t1 = j1.salary;
    j1.salary = j2.salary;
    j2.salary = t1;
    t2 = j1.floor;
    j1.floor = j2.floor;
    j2.floor = t2;
}
 
void Show(job &j)
{
    using namespace std;
    cout << j.name << ": $" << j.salary
         << " on floor " << j.floor << endl;
}
Добавлено через 17 минут
Пришлось решать самому
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
39
40
41
42
43
44
45
46
#include <iostream>
using namespace std;
 
struct box // структура
{
    char maker[40];
    float h;
    float w;
    float l;
    float v;
};
 
template <typename T> // шаблон для возвращения наибольшего из аргументов
T& ver(T& a, T& b);
 
template <> box & ver ( box& a, box & b);// явная специализация для структрур
 
 
 
int main()
{
    box test = {"sds", 10,10,10,10};
    box red = {"sds",20,20,20,0};
    box y = ver (test , red);
    int x = 5;
    int z = 8;
    cout << ver (x,z) << "  " << y.v;
 
 
 
 
}
 
template <typename T> // шаблон для возвращения наибольшего из аргументов
T& ver(T& a, T& b)
{
 
    if (a>b) return a;
    else return b;
}
 
template <> box& ver (box & a, box & b)
{
    if (a.v > b.v) return a;
    else return b;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2015, 18:45
Привет! Вот еще темы с ответами:

Нужно создать класс шаблона для работы c массивом 2х2 - C++
Нужно создать класс при помощи шаблона (template), c массивом 2х2(int,long,float,double) и 2-мя функциями ввода и вывода. Пожалуйста...

Определение метода-шаблона за пределами шаблона класса - C++
День добрый! Разбираюсь в шаблонах, решил копнуть поглубже. Вот пример: template &lt;typename T1&gt; class K // шаблон класса { public:...

g++ ругается на специализацию шаблона - C++ Linux
здравствуйте. есть две функции для сериализации/десериализации простых типов в буфер, и две специализации для строкового типа, как-то...

.NET 4.x НЕ могу создать массив из шаблона - C#
Привет, делаю лабу, и надо сделать массив из шаблонов , я написал первую строку программы и выдает ошибку class ArryTempel&lt;T&gt; { ...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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