![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
ничего не заметили? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ага, заметили.. ) никто и не оспаривает реальное его "жутие", однако это не преуменьшает заслуги xvr'a, показавшего пример, который отвечает на вопрос темы. Это сообщение отредактировал(а) mes - 9.9.2008, 09:47 |
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
А жутие то в чем собственно? Чес слово, вот на asm - то действительно было жутие. Не тебе стандартов, не тебе переносимости. Мне бы хотелось понять каким критериям не удовлетворяет данный код?
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Good
Продолжите список, пожалуйста. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
хм, получается что этот макрос на честном слове работает в этом случае? |
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Гляньте, как описан в различных компиляторах данный макрос:
В борланде, первый вариант применяется. Решительно не понимаю, как подобная вешь может быть интерпретирована не правильно. Если компилятор всегда знает смещения членов класса (относительно начала класса), как подобный макрос может привести к ошибке? У меня работает верно и при наследовании и для абстрактных классов. Гляньте статью, здесь рассмотрены другие варианты примененя этого макроса, ни слова о несовместимости с ПОД типами. http://www.embedded.com/columns/technicali...equestid=142048 |
|||
|
||||
| Lazin |
|
||||||||||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
допустим есть пользовательский класс:
и нужно выполнить некоторый код сразу после создания экземпляра этого класса, при этом этот код должен получить доступ к некоторым членам класса, но к какимименно, заранее не известно... для того, что-бы описать член класса, можно использовать такой шаблон:
функция get шаблона получает this и возвращает требуемый член класса, то-же самое можно сделать и для функций:
этот класс - для функций без параметров, но можно сделать и с параметрами... теперь код самого враппера:
первый параметр - пользовательский класс, второй параметр - член пользовательского класса, который нужен будет врапперу, если написать вот так,
то компилятор сгенерирует класс, который ведет себя так-же как и пользовательский, но при создании его экземпляра будет выполнен нужный нам код (в данном случае будет выведено значение члена класса, который передан в качестве параметра), так-же, в отличии от кода с макросами, врапперы можно объединять в цепочки и работать с произвольным набором параметров...
при создании экземпляра класса double_wrap_test будут выведены на экран оба члена класса my_test, далее, можно написать враппер для функций:
который вызывает функцию пользовательского класса, если сделать так:
то после создания объекта my_test, будут выведены параметры a_, потом b_, а потом то, что вернет функция name... так-же можно перехватить момент удаления объекта, и самое приятное в этом, что компилятор теперь сам будет следить за корректностью кода, если я попытаюсь создать объект у которого конструктор принимает больше 4х параметров, код просто не скомпилируется, а не упадет.... когда работает код враппера, все данные пользовательского класса уже гарантировано сконструированы.... Добавлено через 13 минут и 57 секунд
|
||||||||||||||||||||
|
|||||||||||||||||||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
vaddsm, я честно говоря не совсем понимаю что написано в том предложении, оно какое то кривое. Но насколько я понял, там имеется ввиду, что ограничен в рабе с НЕ POD типами.. эта сцитата с C++ references, и я не вижу причин им не доверять. По всей видимости это несовсем\совсем не стандартная фича. Жаль стандарта нет под рукой...
|
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот пример опасного кода:
Это сообщение отредактировал(а) mes - 9.9.2008, 15:17 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Вполне определено - Segmentation Fault |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ага.. это требование гораздо более опасно и трудно выполнимей, чем заставлять юзера добавлять строчку в конструктор ) Добавлено через 1 минуту и 59 секунд
ага .. вариант с wrapper определено самый функциональный, переносимый и самое главное безопасный Это сообщение отредактировал(а) mes - 9.9.2008, 15:14 |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |