![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
всем доброго утра.
каким образом можно вызвать конструктор базового класса не зная кто предок? код:
http://liveworkspace.org/code/9c0aa5263526...22d9cf0e0da1e70 спасибо. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
конструктор предка должен вызываться из конструктора derived, но этого не происходит. Но у класса derived нет default конструктора (так как компилятор не знает как его сгенерировать) и другого тоже нет. Можно решить через обыкновенную функцию, которую derived унаследует от базового класса а конструктор оставить default, чтобы компилятор мог его генерировать для наследников без каких либо проблем.
что-то вроде этого http://liveworkspace.org/code/5593f2deabab...e404db3d33b550c Это не совсем понятно. Что значит не может? Нельзя писать или его действительно быть не должно? Это немного разные вещи, так как если его действительный быть не должно то как будет создаваться объект? Это сообщение отредактировал(а) azesmcar - 12.10.2010, 05:30 |
|||
|
||||
| boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
класс i_type генерирует метагенератор. как видно, в этом классе, публичные, только чистовиртуальные методы. наследуясь от него, юзер их должен реализовать. не хочется на юзера вешать реализацию того, что ему не нужно(писать конструктор, инициализировать предка, и т.д..). т.е. хочу скрыть от него все остальное.
а конструктор по умолчанию? собственно в этом то и вопрос - нужно создать объект потомок, при этом инициализируя предка неким значением.
хм... именно этого я и хотел избежать. есть еще варианты? |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
в новом стандарте можно вот так
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Но позвольте какие виртуальные методы, и вообще что за база ?! зачем загружать пользователя ? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
на стороне сервера кто-то же должен реализовать обработчики. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
и при чем тут виртуальные методы пакета протокола ?! |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
вы меня не правильно поняли..возможно..
сейчас я занимаюсь именно связыванием типов команд, с их обработчиками. или что?.. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
|
|||
|
||||
| boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
вот что говорит:
как понимать? Добавлено через 1 минуту и 25 секунд чуть позже.. |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
Даже Comeau так не умеет. Кстати, в текущем draft я такой фичи не нашел... |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
я даже не искал. ибо не знаю что искать |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
на то он и новый стандарт http://gcc.gnu.org/gcc-4.5/cxx0x_status.html
N2540 12.9 Inheriting Constructors текущий черновик Это сообщение отредактировал(а) azesmcar - 12.10.2010, 12:49 |
|||
|
||||
| mes |
|
||||||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
недождался я Вашего базового класса, терпеть больше не могу, выкладываю свои мысли. У вас есть два вида типов интерфейса пакета, один это пользовательские данные такие как :
ничего больше, чем нужно пользователю, тут быть не должно.. второй это оболочка над пользовательскими данными, позволяющая управлять пакетом, и желательно чтоб можно было управлять полиморфно.. т.е. абстрактный интерфейс например такой :
терь нам осталось только совместить первое со вторым в одном классе.. делаем шаблон :
для работы такой конструкции нужны гарантии копирования с пользовательской стороны, либо копиконструктор либо соответсвие клонейбл идиологии.. ну и для передачи по сети нам нужен ид. Получать мы его можем автоматом на основе списка типов:
ну и естественно перед использованием списков типов нужно избавиться в нем от дубликатов(на всякий случай) P.S. чему равен аналог Loki::IndexOf<> в бусте не знаю, но если его нету, то и самому написать не сложно.. Это сообщение отредактировал(а) mes - 14.10.2010, 14:53 |
||||||||||
|
|||||||||||
| boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
mes, большое спасибо
я не в коем случае не забил на задачу, т.к. она мне как воздух важна. но приходится еще и другими проектами заниматься. естественно, все эти дни я не дурью маялся, и тоже кое-что накодил сейчас, мой метагенератор, умеет генерить абстрактный класс для айпишек предоставляемых юзеру. т.е. этот код:
сгенерит это:
как вы можете заметить, теперь метагенератор умеет генерить настоящие структуры вместо обертки над тьюплами. класс registration_api - базовый для реализации методов-обработчиков соответствующих типов. т.е. юзер должен от него унаследоваться и реализовать их. на стороне сервера используется так:
вот зы может попросить модераторов чтоб перенести в первоначальную тему? |
||||||
|
|||||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
этим занимается метагенератор. правда сейчас он генерит один ID для запроса и ответа, т.к. они являются одним целым. |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
было б хорошо добавить еще и раздельную кодогенерацию.. отдельно структуры, мета-описания и мета-определения.. тогда уж сделайте возможность деления на группы.. т.е. чтоб не один абстрактный класс кодогенерился , а несколько, указынных пользователем, каждый для своего набора пакета.. и... если у Вас то зачем нужен абстрактный класс ? имена и так связаны, а заставлять пользователя без надобности использовать виртуальность не очень прилично.. Добавлено @ 17:38
с ид отдельная история.. с одной стороны делать их абсолютно автоматическими, как показано в моем примере, тоже не годится, но и жестко привязываться в пользовательском коде, тоже не хорошо.. Лучшим вариантом было бы разгрузить через посредника, который бы по типу выдавал нужный ид. Тогда можно выбирать стратегию определения id.. Но их пока оставим на потом.. Это сообщение отредактировал(а) mes - 14.10.2010, 17:42 |
||||
|
|||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
эм... поясните... так и задумано. хочу в будущем реализовать динамическое связывание объектов по запросу клиента. т.е.:
это переходная версия далее такого не будет. угу. Это сообщение отредактировал(а) boostcoder - 14.10.2010, 17:53 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
наскoлько я понимаю тут не хватает <registration_api> a также заметен сдвиг в сторону асинхроности.. Добавлено @ 18:01
хотелось бы иметь все определения констант в отдельном .cpp файле а также метуинформацию (при этом возможно собранную в структуру, для удбобного пользования) в отдельном .h т.е придется разделить один макрос на три, но как то так, чтоб не пришлось трижды набирать структуру.. т.е. грубо говоря вначале дефайнить описание, а после подвергать различным кодогенерациям в нужном месте.. P.S. через #define может и не получится, а через #include вполне.. хотя первое удобнее.. Это сообщение отредактировал(а) mes - 14.10.2010, 18:05 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ааа, ну да
да-да. конечно. иначе сейчас в одном хидере вся кодогенерация. там черт ногу сломет |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
дело не только в ноге.. сейчас каждое включение хидера будет генерить константы.. т.е. в каждом юните будут свои копии - что не очень..ммм.. культурно... Это сообщение отредактировал(а) mes - 14.10.2010, 18:42 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |