Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
nammidd
10 / 10 / 2
Регистрация: 05.06.2016
Сообщений: 168
#1

Полная специализация члена функции

10.02.2018, 15:42. Просмотров 702. Ответов 4
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
struct A
{
    template <typename T> void f(){std::cout << "generic" << std::endl;}
};
template <> void A<int>::f(){std::cout << "int" << std::endl;}
template <> void A<char>::f(){std::cout << "char" << std::endl;}
 
int main()
{
    A a;
    a.f<float>();
    a.f<int>();
    a.f<char>();
 
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2018, 15:42
Ответы с готовыми решениями:

Полная специализация шаблона класса
Всем плотный хайль, увидел вот такие слова: Я не понимаю смысл второго...

Специализация функции
Добра всем! НЕ могу понять в чем ошибка: ||=== Build: Debug in test...

Специализация шаблона функции
Допустим у нас имеется шаблон функции такой, в угловых скобках которого...

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

Не вызывается специализация шаблонной функции
Читаю книгу Прата, C++ Primer Plus. В ней есть следующее упражнение. ...

4
Ovederax
147 / 103 / 77
Регистрация: 30.04.2017
Сообщений: 229
10.02.2018, 16:03 #2
nammidd, Вы пытаетесь сделать специализацию для класса. Вот так специализируются функции:
C++
1
template <> void A::f<int>(){std::cout << "int" << std::endl;}
0
nammidd
10 / 10 / 2
Регистрация: 05.06.2016
Сообщений: 168
10.02.2018, 16:13  [ТС] #3
Ovederax, Работает, а почему выводит ошибку (explicit specialization in non-namespace scope 'struct A') когда специализация внутри класса?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
struct A
{
    template <typename T> void f() {std::cout << "generic" << std::endl;}
    template <> void f<int>(){std::cout << "int" << std::endl;}
    template <> void f<char>(){std::cout << "char" << std::endl;}
};
 
int main()
{
    A a;
    a.f<float>();
    a.f<int>();
    a.f<char>();
 
    return 0;
}
0
Ovederax
147 / 103 / 77
Регистрация: 30.04.2017
Сообщений: 229
10.02.2018, 16:17 #4
Лучший ответ Сообщение было отмечено nammidd как решение

Решение

nammidd, Специализации методов должны быть описаны вне класса
1
nammidd
10 / 10 / 2
Регистрация: 05.06.2016
Сообщений: 168
10.02.2018, 16:23  [ТС] #5
Ovederax, Да, спасибо.
0
10.02.2018, 16:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2018, 16:23

Частичная специализация шаблона функции
Добрый день, помогите разобраться в чем проблема кода: template &lt;int X, int...

Почему не создается специализация шаблона функции
Почему это не работает и как правильно определить operator&lt;&lt; вне тела класса? ...

Явная специализация функции для структуры
#include &lt;iostream&gt; using namespace std; struct box { char maker; ...


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

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

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