Size: a a a

2020 March 18

V🇺

Vladislav 🇺🇸🚜🇷🇺 in pro.cxx
Vyacheslav 🤔
ну вот есть класс А, В и С от него производные. в классе А есть виртуальный метод, определяемый в В и С. Мне нужно чтобы мне в массив влезали и В и С, но одинаковым вызовом метода выполнялись соответствующие определенные в производных
массив указателей
источник

O

Ofee in pro.cxx
Vyacheslav 🤔
ну вот есть класс А, В и С от него производные. в классе А есть виртуальный метод, определяемый в В и С. Мне нужно чтобы мне в массив влезали и В и С, но одинаковым вызовом метода выполнялись соответствующие определенные в производных
@supapro, но ответ тут уже дали, нужно хранить указатели на A
источник

PK

Pavel Kazakov in pro.cxx
это легально и поликостылизмом называется, это один из столпов ООП, вместе с инкостыляцией и костылированием
источник
2020 March 19

TK

Tetyana K in pro.cxx
Pavel Kazakov
это легально и поликостылизмом называется, это один из столпов ООП, вместе с инкостыляцией и костылированием
*костылЕдованием)
источник

PK

Pavel Kazakov in pro.cxx
Tetyana K
*костылЕдованием)
симпатичный вариант :)
источник

V🤔

Vyacheslav 🤔 in pro.cxx
Ну если через указатели, то ещё в теории понятно, как оно будет работать
источник

TK

Tetyana K in pro.cxx
Vyacheslav 🤔
Ну если через указатели, то ещё в теории понятно, как оно будет работать
Более того, оно даже на практике будет работать :)
источник

NP

Nikita Provotorov in pro.cxx
Vyacheslav 🤔
Добрый вечер. Как создать массив объектов классов, производных от одного класса, чтобы потом можно было вызывать переопределенные методы при перечислении массива?
если хочется оптимальности, то можно создать тонкую обертку над std::variant<A,B,C> и в контейнере уже хранить ее
источник

O

Ofee in pro.cxx
Vyacheslav 🤔
Ну если через указатели, то ещё в теории понятно, как оно будет работать
Нет, ну можно ещё какое-нибудь std::aligned_storage, но, кажется, не тот случай...
источник

TK

Tetyana K in pro.cxx
Nikita Provotorov
если хочется оптимальности, то можно создать тонкую обертку над std::variant<A,B,C> и в контейнере уже хранить ее
Зачем, если есть полиморфизм? Какая оптимальность использования variant? Будет оверхед и менее читабельный код...
источник

NP

Nikita Provotorov in pro.cxx
Tetyana K
Зачем, если есть полиморфизм? Какая оптимальность использования variant? Будет оверхед и менее читабельный код...
динамические аллокации?
источник

m

magras in pro.cxx
Pavel Kazakov
В дебаге сервер не должен работать наружу куда-то; вообще, все претензии к первохулителю, Тиму Суини: https://mobile.twitter.com/timsweeneyepic/status/1223077404660371456?lang=en

Ещё раз, меня беспокоит наследие старых говен мамонта, я не спрашиваю как с ними работать :) что такое SEH/VEH я знаю тоже, и про ветвление траями-кетчами тоже не надо
Автор ниже сознался: https://mobile.twitter.com/TimSweeneyEpic/status/1223376031949651969

Там просто используется старая виндовая реализация исключений.
источник

NP

Nikita Provotorov in pro.cxx
еще и прыгать по двум указателям надо будет
источник

O

Ofee in pro.cxx
Tetyana K
Зачем, если есть полиморфизм? Какая оптимальность использования variant? Будет оверхед и менее читабельный код...
А точно ли там будет больший оверхед? Если это duck typing, то я несколько сомневаюсь
источник

TK

Tetyana K in pro.cxx
Nikita Provotorov
динамические аллокации?
У тебя размер типа с вариантом будет приблизительно равен самому большому из типов, это же обычный юнион с наворотами. Навороты не сильно большой оверхед накладывают. Но классы могут быть любыми
А если там один из классов содержит много полей большого размера? На 10 элементов массива этого будет незаметно, на тысячах может быть уже существенно
источник

NP

Nikita Provotorov in pro.cxx
Tetyana K
У тебя размер типа с вариантом будет приблизительно равен самому большому из типов, это же обычный юнион с наворотами. Навороты не сильно большой оверхед накладывают. Но классы могут быть любыми
А если там один из классов содержит много полей большого размера? На 10 элементов массива этого будет незаметно, на тысячах может быть уже существенно
ах ну да, я под оптимальностью имел в виду процессорное время, а не память
источник

P

Pepe 🐸 in pro.cxx
Vyacheslav 🤔
Ну если через указатели, то ещё в теории понятно, как оно будет работать
можно просто кастануть производные классы к базовому
источник

V🤔

Vyacheslav 🤔 in pro.cxx
Pepe 🐸
можно просто кастануть производные классы к базовому
Но разве тогда будет вызываться не метод базового?
источник

P

Pepe 🐸 in pro.cxx
Vyacheslav 🤔
Но разве тогда будет вызываться не метод базового?
если это статик каст на объект то да

Base b;
Derived d;
vector<Derived> v;
....
static_cast<Base>(v[i]).foo();
источник

TK

Tetyana K in pro.cxx
Nikita Provotorov
ах ну да, я под оптимальностью имел в виду процессорное время, а не память
У большинства сишников (не плюсовиков) память - это больная тема 😂
источник