Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

дефолтное значение шаблона

292
12 апреля 2007 года
Matush
726 / / 14.01.2004
имеется некий класс:
 
Код:
template <class T = CA>
class CB : public T
{
// ...
}


хочу чтобы экзепляры класса можно было обьявлять так:
CB b;

Сейчас для дефолтного значений приходится обьявлять CB<> b;

P.S.
 
Код:
typedef CB<CA> ccc // не предлагать !
3
12 апреля 2007 года
Green
4.8K / / 20.01.2000
Ну а в чем проблема объявлять CB<> b; ?
Можешь сделать
 
Код:
typedef CB<> CBB;
CBB b;

или так
 
Код:
class CBB :public CB<> {};

если не лень конструкторы переопределять.

Только вот зачем всё это?
292
12 апреля 2007 года
Matush
726 / / 14.01.2004
Цитата: Green

Только вот зачем всё это?



Зачем, тут спорный вопрос.
Ситуация такая:
есть класс CX, наследник от CA,
в некоторых случаях надо класс CX с дополнительным функционалом. Этот функционал есть в классе CB, который наследник от CA. То есть можно CX унаследовать от CB в нужных местах. Для этого я и добавил шаблон. Мне это показалось более логичным, чем создавать еще один класс.

3
12 апреля 2007 года
Green
4.8K / / 20.01.2000
Туманное объяснение. Может, побольше конкретики?
Кстати, ты пробовал смотреть на свою задачу с т.з. паттерна "стратегия" ("примесь").

А мой вопрос ты неправильно понял. Я не спрашивал зачем тебе шаблон, я спрашивал, что тебе мешает указывать явно параметр шаблона?
292
12 апреля 2007 года
Matush
726 / / 14.01.2004
Цитата: Green

А мой вопрос ты неправильно понял. Я не спрашивал зачем тебе шаблон, я спрашивал, что тебе мешает указывать явно параметр шаблона?


Я понял правильно. Забыл написать :)

У меня в 90% случаях надо указывать один и тотже параметр. Потому было-бы хорошо в таких случаях ничего не писать (а точнее не править уже существующие обьявления классов).

Вот конкретика ситуации:
Есть класс который рисует прямоугольник, он наследуется от базового класса(этот класс для любых фигур).
Есть класс унаследовав который, фигура получает способность реагировать на мышку (этот класс также наследуется от базового для всех фигур).
Мне надо класс простого прямоугольника и класс прямоугольника, который реагирует на мышку.
Я решил не делать два разных класса, а сделать один шаблонный. Так как эти классы практически одинаковые.

3
13 апреля 2007 года
Green
4.8K / / 20.01.2000
А зачем класс-обработчик мыши унаследован от класса-формы?

Попробуй так:
 
Код:
class IShape;
class IMouseHandler;

class Box :IShape;
class InteractiveBox : Box, IMouseHandler;
292
16 апреля 2007 года
Matush
726 / / 14.01.2004
Цитата: Green
А зачем класс-обработчик мыши унаследован от класса-формы?



Согласен. Неправильная иерархия была.
Собственно меня интересовало не это, а сам сабж (дефолтное значение). Я так понимаю что решение проблемы это "<>" либо "typedef"

3
16 апреля 2007 года
Green
4.8K / / 20.01.2000
Цитата: Matush
Я так понимаю что решение проблемы это "<>" либо "typedef"


Да.
Можно предложить ещё public-наследование (я уже приводил пример), ну и #define.

309
17 апреля 2007 года
el scorpio
1.1K / / 19.09.2006
#define - тяжкое наследие C-стиля.
Проще всего typedef. Можно при создании шаблона сразу накидать переопределений на все самые распространённые типы.

P.S.
Matush
Всё-таки, а почему не предлагать????
3
17 апреля 2007 года
Green
4.8K / / 20.01.2000
Цитата: el scorpio

Проще всего typedef.


Проще и правильнее инстанировать шаблон на месте.

Цитата: el scorpio

Можно при создании шаблона сразу накидать переопределений на все самые распространённые типы.


Это ещё зачем? Чтоб жизнь медом не казалась? :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог