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

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

Войти
Регистрация
Восстановить пароль
 
1um
Сообщений: n/a
#1

Наследуемый класс в параметре шаблона - C++

24.11.2012, 15:03. Просмотров 425. Ответов 7
Метки нет (Все метки)

Нужно ограничить классы, передаваемые в параметры шаблона до классов, наследуемых от заданного.
Пример- два класса :

Класс Хлебобулочное изделие с методами узнать состав теста, узнать размер изделия.

И шаблонный класс Печь, в шаблоне которого то, что нужно запечь. У него есть методы запечь и достать.

Так, вот этот класс Печь, должен быть уверен, что ему подсунули хлебобулочное изделие, ведь только зная состав теста и размеры он может испечь.
Но это еще не все...
Я создают булочку:хлебобулочное изделие и добавляю метод намазать маслом, передаю ее в специальную печь <булочка> и при вызове функции достать я хочу получить булочку, а не хлебобулочное изделие, так как потом собираюсь ее намазать маслом(а в хлебобулочном изделии такого метода нет).

В общем я хочу, что бы было как-то так:

template <class любое хлебобулочное изделие>
class Печь

Как-то так. есть предложения?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2915 / 1344 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
24.11.2012, 15:31     Наследуемый класс в параметре шаблона #2
В C++ до последнего стандарта такая возможность есть только в boost.

На самом деле, в такой задаче не нужны шаблонные классы. Нужно грамотно продумать иерархию абстракций и их взаимодействие.

Не могу так же не заметить сходство задачи с шаблоном проектирования "abstract factory".
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
24.11.2012, 15:36     Наследуемый класс в параметре шаблона #3
Цитата Сообщение от 1um Посмотреть сообщение
template <class любое хлебобулочное изделие>
class Печь
что делает эта конструкция? получается, для каждого изделия у нас своя печь, никак не связанная друг с другом общим классом?
gray_fox
What a waste!
 Аватар для gray_fox
1252 / 1135 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
24.11.2012, 15:39     Наследуемый класс в параметре шаблона #4
Цитата Сообщение от 1um Посмотреть сообщение
класс Печь, должен быть уверен, что ему подсунули хлебобулочное изделие, ведь только зная состав теста и размеры он может испечь
Если ты подсунешь не хлебобулочное изделие (точнее тип, у которого нет методов, используемых в шаблоне), то будет просто ошибка компиляции.
1um
Сообщений: n/a
24.11.2012, 16:40     Наследуемый класс в параметре шаблона #5
Для Kuzia domovenok:
создается объект класса печь, который умеет печь какое-то конкретное хлебобулочное изделие. Но пекутся все хлебобулочные изделия одинаково, просто это печь возвращает нашу конкретную булку, и поэтому мы с ней можем делать, то что можно делать только с булкой.
gray_fox :
Спасибо, наверно так и оставлю пока не разберусь с наводкой, данной lemegeton.
silent_1991
Эксперт C++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
29.11.2012, 11:53     Наследуемый класс в параметре шаблона #6
Цитата Сообщение от lemegeton Посмотреть сообщение
В C++ до последнего стандарта такая возможность есть только в boost.
Из стандарта исключили concepts, так что и в последнем стандарте так сделать не получится.

Добавлено через 51 секунду

Не по теме:

Цитата Сообщение от lemegeton Посмотреть сообщение
Не могу так же не заметить сходство задачи с шаблоном проектирования "abstract factory".
Мне сразу показалось, что тут не сходство, а этот шаблон в чистом виде.

ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
29.11.2012, 16:31     Наследуемый класс в параметре шаблона #7
silent_1991, static_assert и type_traits никто не отменял. Так что все же есть.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2012, 16:34     Наследуемый класс в параметре шаблона
Еще ссылки по теме:

Ошибка в передаваемом параметре функции C++
C++ Класс на шаблонах, менять аргументы шаблона
C++ Нужно создать класс шаблона для работы c массивом 2х2
Соединение строк в параметре функции C++
C++ Указатель/ссылка в параметре функции

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
29.11.2012, 16:34     Наследуемый класс в параметре шаблона #8
ForEveR, ну, концепции-то предназначались именно для этого. А определить, является ли один класс наследником другого, можно и в старом стандарте с помощью вспомогательного класса, написанного в 10 строк, и тоже на стадии компиляции (ну или воспользоваться бустом, разумеется).
Yandex
Объявления
29.11.2012, 16:34     Наследуемый класс в параметре шаблона
Ответ Создать тему
Опции темы

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