производных Derived1, Derived2
есть 2 указателя на производные через базовый класс p1 и p2
мне нужно сравнить типы данных производных классов, на которые они указывают
я нашел решение:
bool theSame = dynamic_cast<void*>(p1) == dynamic_cast<void*>(p2);
только с shared_ptr такое не выходит (почему-то в любом случае false), как это можно проще всего сделать??
С шаредом не работает,т.к это шаблоный класс. И типы которые передаются шаблонным параметром ничего не знают друг о друге грубо говоря.Юзай dynamic_pointer_cast
Тут же сравнение адресов, не ?
Ну там сравниваются 2 указателя на разные объекты и работает все норм, так что, видимо, нет
У тебя два указателя приведены к указателю на void*, далее ты их сравниваешь. То есть сравнивашь два адреса на сырые данные, не?
std::is_same_v(decltype(*p1), decltype(*p2)) подозреваю что что-то вроде этого должно быть. Но прям так скорее всего не сработает
Комбинаторное программирование продолжалось?
А зачем тебе это нужно?
Выбор варианта рандомно
Надо векторы сравнить с указателями)
Но зачем?! Выглядит как дыра в архитектуре
Ну по семантике то что нужно, вопрос только в том что посчитается ли это в компайл тайме
По семантике не то что нужно, ибо у ТС два вектора указателей Base*
Про векторы что-то я проглядел где было написано
Так это после моего ответа была прислано
Ок, оригинальный пост. "Через базовый класс"
Ну дык Массив указателей на производные через базовый
В любом случае, ответ выше: 1. typeid 2. Переделать архитектуру
Где можно про архитектуру почитать?)
В гугле... Боюсь, вопрос по крайней мере слишком обширный
Как скажешь)
Обсуждают сегодня