С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886

Специализации шаблонов класса

02.10.2015, 15:20. Показов 1927. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Из книги
Однако при специализации шаблона класса необходимо специализировать все его функции-члены. Хотя можно специализировать и отдельную функцию-член, после этого нельзя будет специализировать целый класс.
Просьба пример показать. А-то не очень понятно. Как-то очень обобщенно.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.10.2015, 15:20
Ответы с готовыми решениями:

Специализации шаблонов классов
Здравствуйте, возникла следующая проблема. Пишу класс Матрица со след. шаблонными параметрами. template<typename Type, size_t...

Тест по специализации шаблонов
Всех приветствую. Столкнулся с подобной проверкой знаний при переводе в другой универ, а именно предлагается нижеприведённый тест для...

Ошибка определения специализации шаблонного класса
На этом месте вылазит ошибка: Error 1 error C3413: 'MyClass<int>' : invalid explicit instantiation template class MyClass<int> ...

5
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
02.10.2015, 15:49
Лучший ответ Сообщение было отмечено daslex как решение

Решение

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
template <typename T> class foo {
public:
    void func_one() {
        /*  */
    }
    void func_two() {
        /*  */
    }
};
 
template<> class foo<int> {
public:
    void func_one() {
        /*  */
    }
};
 
int main () {
    foo<double> d;
    d.func_one();
    d.func_two();
 
    foo<int> i;
    i.func_one();
    i.func_two(); /*Ой, а такой функции то и нету*/
    return 0;
}
Добавлено через 6 минут
Т.е. я не так понял условие. Вот:
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
#include <iostream>
template <typename T> class foo {
public:
    void func_one() {
        /*  */
    }
    void func_two() {
        /*  */
    }
};
 
template<> void foo<int>::func_one() {
    /* */
}
 
template<> class foo<int> { //<-- Ошибка. Вторичная специализация.
public:
    void func_two() {
        /*  */
    }
};
 
int main () {
    return 0;
}
2
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
02.10.2015, 18:19  [ТС]
Не получается.

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>
 
template <typename T>
class MyClass{
    T x,y;
    public:
        MyClass (T const &, T const &);
        T Add();
};
 
template <typename T>
MyClass<T>::MyClass(T const &x_, T const &y_):x(x_),y(y_){}
 
 
template <typename T>
T MyClass<T>::Add(){
    return x+y;
}
 
template <>
 class MyClass<const char*>::Add(){} // <---- Вот это не понимаю синтаксис, как делать.
 
template <>
class MyClass<const char*>::MyClass(){}; //<---- В том числе для конструктора
 
 
int main(){
    MyClass<int> X(7,8);
    std::cout<<X.Add();
 
    MyClass<char*> X2("one","two");
    std::cout<<X2.Add();
}
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
05.10.2015, 08:13
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
#include <iostream>
 
template <typename T>
class MyClass{
    T x,y;
    public:
        MyClass (T const &, T const &);
        T Add();
};
 
template <typename T>
MyClass<T>::MyClass(T const &x_, T const &y_):x(x_),y(y_){}
 
 
template <typename T>
T MyClass<T>::Add(){
    return x+y;
}
 
template <> const char* MyClass<const char*>::Add(){}
 
template <>
class MyClass<const char *>{
    const char* x;
    const char* y;
    public:
        MyClass (const char* x_, const char* y_): x(x_), y(y_) {}
        const char* Add() {}
};
 
int main(){
    MyClass<int> X(7,8);
    std::cout << X.Add();
 
    MyClass<const char*> X2("one","two");
    std::cout << X2.Add();
}
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
05.10.2015, 10:17  [ТС]
Ilot, 20 строчка приводит к ошибке.

В смысле без нее работает. Просто факт.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
05.10.2015, 11:46
Цитата Сообщение от daslex Посмотреть сообщение
Ilot, 20 строчка приводит к ошибке.
В смысле без нее работает. Просто факт.
Это сделано специально. Вы же сами просили привести пример не компилируемого кода.
Цитата Сообщение от daslex Посмотреть сообщение
...можно специализировать и отдельную функцию-член, но после этого нельзя будет специализировать целый класс.
Пример выше это показывает.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.10.2015, 11:46
Помогаю со студенческими работами здесь

Наследование шаблонов класса массивов
Итак имеется шаблон класса массивов и нужно наследовать его в класс массивов string и вот как я его сделал array.h #include...

Реализация шаблонов класса в инлайн файле
Пытался написать шаблонны MyClass.h #pragma once #define MYCLASS template &lt;typename T&gt; class MyClass { public:

Реализация шаблонов класса в инлайн файле
Пытался написать шаблонный класс, реализуя как обычно объявление класса в h файле и определение элемент-функций в с++. Компилятор постоянно...

В разделе "редактор шаблонов" в таблице нет файлов шаблонов
Привет, помогите с проблемой в движке DLE, в разделе редактор шаблонов в таблице нет файлов шаблона куда то пропали. Пропали после того как...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru