![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| uvsoft |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
Итак, есть следующий набор классов:
Подскажите, что необходимо передать в конструктор класса SYSTEM, чтобы сказать ему какой именно производный класс от OBJECT необходимо истользовать для инициализации указателя pobj. Т.е. грубо говоря есть куча потомков, чисто которых постоянно увеличивается и чтобы истользовать вновь созданного потомка достаточно изменить где-то в main одну строчку:
Сопоставлять каждому потомку какай-нибудь идентификатор и проверять потом НЕ ПОЙДЕТ:
Хочется чего-нибудь универсального
Это сообщение отредактировал(а) chipset - 3.4.2005, 10:08 --------------------
Старый глюк лучше новых двух. |
||||||||
|
|||||||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Сделай конструктор класса SYSTEM с параметром типа OBJECT *
тогда вот тебе как вариант:
|
|||
|
||||
| Artiom |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
a new делать в main().
так подходит? -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
||||
|
|||||
| chipset |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Таким образом юзаются шаблоны и ты можешь задавать любой класс, что в некотором роде и плохо.. --------------------
|
||||||
|
|||||||
| uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
спасиба за ответы!
но тут небольшая проблемка... если использовать вариант chipset'a, то действительно можно через шаблон создать объект любого класса, что неправильно, ведь SYSTEM должен быть уверен в том, что pobj является наследником OBJECT, для того, чтобы использовать его функциональную часть... Варианты Daevaorn'a и Artiom'а не подходят, потому что только SYSTEM знает какие именно параметры нужно передавать в конструктор OBJECT, то есть в SYSTEM инкапулирована какая-нить инфа, необходимая для создания OBJECT, например, он передает указательно на себя (на владельца), какие-то начальные параметры, зависящие от текущего состояния SYSTEM... --------------------
Старый глюк лучше новых двух. |
|||
|
||||
| Artiom |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
chipset Почему плохо? А то я подумал у себя так сделать.
только поэтому?
Это сообщение отредактировал(а) Artiom - 3.4.2005, 10:44 -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
| uvsoft |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
ну, например, я сделаю так:
И что тогда получается?
--------------------
Старый глюк лучше новых двух. |
||||||
|
|||||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Ага. ... Можно в принципе проверять в рантайме на соответствие OBJECT. Но даже если ты вызовешь функцию которой нету в темплейте, компилятор будут материться, так что ничего страшного нету. Это сообщение отредактировал(а) chipset - 3.4.2005, 11:02 --------------------
|
||||
|
|||||
| uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
плз, чиркани пару строчек... --------------------
Старый глюк лучше новых двух. |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
--------------------
|
|||
|
||||
| Void |
|
||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
В принципе, можно соорудить и compile-time проверку - при помощи boost::enable_if и type_traits. Это будет выглядеть примерно так:
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||
|
|||||
| uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
Что-то я тут сильно намудрил, и ничего не клеится...
--------------------
Старый глюк лучше новых двух. |
|||
|
||||
| uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
--------------------
Старый глюк лучше новых двух. |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
А ты скажи как именно не работает.
Я что, похож на компилятор? --------------------
|
|||
|
||||
| uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
использую VC++. выдает вот это: test_it error LNK2001: unresolved external symbol "public: virtual void __thiscall objectt::doit(void)" (?doit@objectt@@UAEXXZ)
--------------------
Старый глюк лучше новых двух. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |