Здравствуйте, Varavva, Вы писали:
V>Что-то с этим Obj-C подзабыл немного C++
V>Есть такая иерархия классов
V>Image: aas.png
V>Есть функция, возвращающая указатель на С, но на самом деле она возвращает указатель на объект D
V>Можно ли как-то правильно этот указатель на С превратить в правильный указатель на А?
static_cast<A*>(dynamic_cast<D*>(cptr))
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Здравствуйте, Varavva, Вы писали:
V>Здравствуйте, T4r4sB, Вы писали:
TB>>static_cast<A*>(dynamic_cast<D*>(cptr))
V>Эмм, забыл сказать, что это все в библиотеке и класс D внутри библиотеки, а A B и C — торчат наружу. То есть пользователь библиотеки не знает про D
А, придумал сам уже. К классу С добавить метод getA() — нормальное решение?
Здравствуйте, Varavva, Вы писали:
V>Здравствуйте, T4r4sB, Вы писали:
TB>>static_cast<A*>(dynamic_cast<D*>(cptr))
V>Эмм, забыл сказать, что это все в библиотеке и класс D внутри библиотеки, а A B и C — торчат наружу. То есть пользователь библиотеки не знает про D
Дописать функцию в библиотеку можно?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Здравствуйте, Varavva, Вы писали:
TB>>>static_cast<A*>(dynamic_cast<D*>(cptr)) V>>Эмм, забыл сказать, что это все в библиотеке и класс D внутри библиотеки, а A B и C — торчат наружу. То есть пользователь библиотеки не знает про D V>А, придумал сам уже. К классу С добавить метод getA() — нормальное решение?
Если getA() — виртуальной, то на мой вкус это нормальное решение.
Здравствуйте, Varavva, Вы писали:
V>Что-то с этим Obj-C подзабыл немного C++
V>Есть такая иерархия классов
V>Image: aas.png
V>Есть функция, возвращающая указатель на С, но на самом деле она возвращает указатель на объект D
V>Можно ли как-то правильно этот указатель на С превратить в правильный указатель на А?
dynamic_cast C из А и проверка на nullptr? Или какие-то проблемы есть. Простой пример, говорит, что нет: http://ideone.com/o8uNlj — первый вариант: есть общий класс в иерархии — привести получилось. Второй — нет общего класса — получили nullptr
Здравствуйте, monah_tuk, Вы писали:
_>dynamic_cast C из А и проверка на nullptr? Или какие-то проблемы есть. Простой пример, говорит, что нет: _>http://ideone.com/o8uNlj — первый вариант: есть общий класс в иерархии — привести получилось. Второй — нет общего класса — получили nullptr
Не знай почему проблемы были, но XCode после приведения вообще выдал левый указатель и все падало. Но все уже решилось, так что тему можно закрывать