![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| InvalidProperty |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: нет Всего: 9 |
Передо мной возникла проблема, решение которой я считаю достойным публикации, дабы остальное сообщество могло бы найти решение поставленной проблемы по возможности быстрее, чем это удалось мне.
Преамбула: Данный метод более всего подойдет для наследования классов исключений, базовый класс которых должен содержать строку описания исключения. Идея: Имеется базовый класс, конструктор которого принимает переменное число аргументов
Имеется дочерний класс. Его конструктор также должен принимать переменное число аргументов и создавать базовый класс. Постановка вопроса: Как передать переменное число аргументов из конструктора дочернего класса в конструктор базового? Размышления: Чтобы произвести создание базового класса из конструктора дочернего с указанием некоторых параметров для конструктора базового класса, нужно написать примерно следующее:
Но такая махинация для переменного числа параметров потерпит фиаско. Решение: В базовом классе создается статическая функция, которая будет отвечать за упаковку переменных параметров в строку:
и это будет работать!. Но! Как только мы попытаемся вызвать конструктор либо базового, либо дочернего класса, передавая строку, лежащую на стеке, или в статической памяти, приложение вылетит:
Для того, чтобы решить проблему, нужно создать некую структуру, которая будет содержать в себе строку, передаваемую конструкторам. Определение этой структуры ДОЛЖНО находиться в базовом классе, чтобы избежать создания такой структуры напрямую. Полный код решения:
Надеюсь, пояснений к коду не потребуется, но готов ответить на все вопросы Это сообщение отредактировал(а) InvalidProperty - 29.1.2010, 17:39 -------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
||||||||||
|
|||||||||||
| InvalidProperty |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: нет Всего: 9 |
т.о. мы можем написать что-то вроде
и получим именно то, что хотим -------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
||||
|
||||
| InvalidProperty |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: нет Всего: 9 |
zim22, задача заключалась в передачи из конструктора дочернего класса именно тех же переменных параметров, что были переданы в него, а не просто каких-то
Добавлено через 59 секунд mes, вторым постом я привел строку, которую можно использовать, применив данный метод Добавлено через 2 минуты и 11 секунд zim22, тем более, молодой человек, судя по коду, который Вы привели, Вы не прочитали пост вообще -------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
я хоть свой возраст указал в инфо. насколько же вы молодой или старый - могу лишь догадываться. но в одном я уверен на 100% - есть более изящный метод решения вашей теоретической проблемы. *** и вообще, причём здесь возраст? "одни с годами умнеют - другие просто становятся старше." Это сообщение отредактировал(а) zim22 - 29.1.2010, 18:10 |
|||
|
||||
| InvalidProperty |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: нет Всего: 9 |
так а я ведь всегда за здоровую критику. Давайте обсудим Ваш метод -------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
InvalidProperty, ок. напиши проблему, решение которой ты видишь только через использование ellipsis'a.
я попробую решить её без них. |
|||
|
||||
| InvalidProperty |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: нет Всего: 9 |
zim22, да что далеко ходить? Мне нужен класс исключений, который наследован от некоторого базового класса исключений. Нужно, чтобы и дочерний и базовый класс поддерживали конструкцию выбрасывания исключений с переменным числом параметров. Как Вы видите ее решение?
-------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
это не проблема. это деталь реализации. *** примеры проблем: 1) есть картотека. для каждой из записей картотеки нужно применять разные алгоритмы анализа в зависимости от типа записи. 2) ... Это сообщение отредактировал(а) zim22 - 29.1.2010, 19:03 |
|||
|
||||
| InvalidProperty |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: нет Всего: 9 |
zim22, Вы к чему это сказали? Вы вообще топик этот прочитали или просто пустились в философию? Топик посвящен конкретной теме. Если есть иное решение, то покажите, и мы его обсудим, а иначе получается, что Вы просто льете воду. Зачем топик засорять?
-------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
erased
И вообще, элипсис это рудимент доставшийся от С... Это сообщение отредактировал(а) Леопольд - 29.1.2010, 19:44 -------------------- вопросов больше чем ответов |
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
а я извращенец
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
проведу аналогию. уж люблю я их
мораль сей басни такова: не нужно решать задачу неправильными методами. чтобы узнать какой метод правильный - нужно сначала понять саму задачу. |
|||
|
||||
| andrew_121 |
|
||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
философ епс ну расскажи что думаешь об этом. меня тоже такая задача посещает время от времени. -------------------- Удалил аккаунт. Прощайте! |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |