![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
Задачка по чистым C++, потому сюда и кидаю.
Если кто знает ответ или задача покажется слишком элементарной, просьба восхищаться собой молча ![]() Есть класс
Можно ли взять адрес у экземпляра этого класса? Если да, то как? Решение должно быть по стандарту С++, работать на любых платформах и т.п. |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
не знаю, является ли это правильным решением, но вот что у меня получилось:
|
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
тут раньше сморозил...
Это сообщение отредактировал(а) Alek86 - 18.3.2008, 12:34 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
РЕШЕНИЕ ВНИЗУ!!!
&static_cast<const C&>© -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
да проверил, работает, т.к. оператор не константный.
а вот если еще добавить константный оператор - тада я хз вообще.
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
ну, пусть будет добавлен - про константность забыл :(
в оригинале звучало: класс, у которого переопределен опратор & Это сообщение отредактировал(а) Alek86 - 18.3.2008, 12:39 |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
нашел решение.
static_cast<C*>(static_cast<C&>(obj)) Это сообщение отредактировал(а) korian - 18.3.2008, 12:51 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
MAKCim,
размер указателя на A и размер указателя на C могут отличаться, так что есть вероятность потерять часть данных |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
разве можно статиккастить так? Добавлено через 4 минуты и 55 секунд
ты уверен? в каком случае? у меня решение было похожее (только A был наследником C и статик каст использовался) |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот что нашел :
Функция addressof() возвращает адрес объекта. ... C++ разрешает программисту заменять унарный оператор в классе operator&() для получения адреса объекта. Получение истинного адреса объекта требует неуклюжих тюков с преобразованием (casting), чтобы избежать вызова перегруженного оператора operator&(). Функция addressof() обеспечивает обертку для необходимого кода< чтобы упростить получение истинного адреса объекта. ... Пример
|
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
хехе
думаю, это и есть решение... ![]() |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
на борланде 6.0 работает ![]() в C++ гарантируется только то что в void* влезит любой указатель, размер остальных указателей может быть любым. умные люди пишут, что если вы уж решились использовать reinterpret_cast, то лучше делать это так: int* intptr = reinterpret_cast<int*>(static_cast<void*>(objptr)); насчет "с наследованием" не знаю, поидее тоже должны как-то транслироваться друг в друга. вот только не известно должно ли оно работать, если приводить к наследнику, а сам объект является базовым классом... поидее это не правильно, т.к. получился указатель, на объект которого не существует. ну да... чистый C++ ... |
|||
|
||||
Alek86 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
то есть реализация бустовского addressof некроссплатформенна?
должно. у компилера есть вся инфа для этого Это сообщение отредактировал(а) Alek86 - 18.3.2008, 14:22 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |