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

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

Восстановить пароль Регистрация
 
1um
Сообщений: n/a
24.11.2012, 15:03     Наследуемый класс в параметре шаблона #1
Нужно ограничить классы, передаваемые в параметры шаблона до классов, наследуемых от заданного.
Пример- два класса :

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

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

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

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

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

Как-то так. есть предложения?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2012, 15:03     Наследуемый класс в параметре шаблона
Посмотрите здесь:

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

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

Не могу так же не заметить сходство задачи с шаблоном проектирования "abstract factory".
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
24.11.2012, 15:36     Наследуемый класс в параметре шаблона #3
Цитата Сообщение от 1um Посмотреть сообщение
template <class любое хлебобулочное изделие>
class Печь
что делает эта конструкция? получается, для каждого изделия у нас своя печь, никак не связанная друг с другом общим классом?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
29.11.2012, 11:53     Наследуемый класс в параметре шаблона #6
Цитата Сообщение от lemegeton Посмотреть сообщение
В C++ до последнего стандарта такая возможность есть только в boost.
Из стандарта исключили concepts, так что и в последнем стандарте так сделать не получится.

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

Не по теме:

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

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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

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

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

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