|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
Есть либа из одного заголовка tree.h https://github.com/kpeeters/tree.hh Все работает и мне удалось загнать в node полиморфный объект и прочитать. Не удалось кастовать базовый класс к наследнику. Это код при записи в node string Код: plaintext 1. 2. 3. 4. 5.
При записи вместо string базового класса и наследника, я получаю базовый так: MyBase base = *sib; Как кастовать в наследника его? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 20:03 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
Попутный вопрос. Как работает поиск node в итераторе если ищется не строка а поле класса? Сейчас при смене типа у меня find не компилится loc=find(tr.begin(), tr.end(), "two"); ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 20:07 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
Доп.вопрос. Почему cout << typeid(base).name() << endl; Не выводит имя MyBase, а выводит.. (по памяти) 74namespaceMyBase12345 )) компа нет под рукой)) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 20:14 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Кастовать в наследника не нужно. Для этого придумали виртуальные методы ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 21:15 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
Siemargl PetroNotC Sharp, Кастовать в наследника не нужно. Для этого придумали виртуальные методы Я бы за. Но не вижу специфических методов наследника в IDE. Они только у наследника. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 21:59 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Ну ты то умнее IDE... Или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2021, 23:06 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Вот, о чем тебе говорил Siemargl Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
Код: plaintext 1. 2. 3.
PetroNotC Sharp Попутный вопрос. Как работает поиск node в итераторе если ищется не строка а поле класса? Сейчас при смене типа у меня find не компилится loc=find(tr.begin(), tr.end(), "two"); ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 01:06 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad, Спасибо. Круто. Выше писал что мне нужен НЕ виртуальный метод в наследнике. Вызов виртуального у меня работает. Там приведение типов не нужно. Возможно все дело в том что я вместо mTree.insert(... std::make_unique<ChildFirst>()); по аналогии со строкой mTree.insert(... "abc" ); Делал mTree.insert(... ChildFirst(123, "abc") ); Умных указателей развелось. Доберусь до компа попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 06:57 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
Siemargl PetroNotC Sharp, Ну ты то умнее IDE... Или нет? Я к IDE отношусь с богопочтением.)) Мне нужно после точки подсказка по кастованному объекту. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 06:59 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
авторИспользуя информацию о типах во время выполнения, можно проверить, указывает ли указатель на полный объект и можно ли безопасно выполнить приведение этого указателя, чтобы он указывал на другой объект в своей иерархии. Для выполнения этих типов приведений можно использовать оператор dynamic_cast Вот у меня это не выходило, возможно из за статической инициализации без оператора new объекта. std::make_unique не приходилось использовать ни разу. Каюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 07:22 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad, Блин))) у меня с++11 Пробовать оператор new? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 10:07 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad, Можно пример для с11? Ни shared_ptr, ни unique_ptr, ни new не работают. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 10:31 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Доп.вопрос. Почему cout << typeid(base).name() << endl; Не выводит имя MyBase, а выводит.. (по памяти) 74namespaceMyBase12345 )) компа нет под рукой)) N5my15my213ClassMyE Для namespace my1{ namespace my2{ class ClassMy ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 10:43 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Возможно все дело в том что я вместо mTree.insert(... std::make_unique<ChildFirst>()); по аналогии со строкой mTree.insert(... "abc" ); Делал mTree.insert(... ChildFirst(123, "abc") ); Умных указателей развелось. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 11:01 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad, Пробовал. Не выходит. (( А с pointer = new class не берет сама либа ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 11:12 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Пробовал. Не выходит. (( ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 11:15 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad, Главное, со статической инициализацией все работает. И я так понял потом кастовать в наш указатель уже поздно что ли? Я вообще на либу подумал. Но потом все заработало кроме получения полного класса из базового. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 11:15 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad PetroNotC Sharp Пробовал. Не выходит. (( Спс. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 11:16 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad, Загрузил твой код не в Qt с 11 а в студии Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Дает ошибку cannot convert from unique ptr Как исправить? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 15:10 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Fix лежит на поверхности, но я не дам тебе решения, пока ты не объяснишь какую задачу ты решаешь и для каких целей тебе такая конвертация. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 15:55 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad, Ну, во первых это обычное поле data pointer в деревьях еще со времен дельфи. Во вторых, мне конкретно в листьях дерева нужен класс ЛистДерева с бизнес данными. А выше структура это просто классификатор. Например, в листьях Семья с атрибутами. А дерево это адрес. Или .... Это банальная Модель данных повсюду. Как поле tag в любом vcl объекте. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 16:08 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad, Раньше была Сишная конвертация))) А теперь наворотили из за отсутствия сборщика мусора? (про shared ptr почитал))) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 16:10 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3.
Это шарп ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 16:17 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
AmKad, И вообще, чем дерево как коллекция отличается от списка TList? Я же не о полиморфизме счас. Там нельзя наследников держать? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 16:19 |
|
Tree + полиморфный. Как кастовать в наследника?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Зачем вам наследование если наследники не наследуют виртуальные функции? Лучше используйте std::vaiant с обычными значениями и не морочьте себе голову. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 18:08 |
|
|
start [/forum/topic.php?fid=57&fpage=3&tid=2017202]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 145ms |
0 / 0 |