170 похожих чатов

Я, возможно, не до конца понимаю вопрос, но этот код

делает то, что надо, или нет? И если нет, то укажите что именно
#include <iostream>
#include <string>
#include <memory>
#include <typeinfo>
#include <cassert>

struct Base {
virtual std::string me() { return "Base"; }
};

struct Derived : Base {
virtual std::string me() override { return "Derived"; }
};

struct DoubleDerived : Derived {
virtual std::string me() override { return "DoubleDerived"; }
};

template <typename B, typename D>
std::shared_ptr<B> clone(std::shared_ptr<B> ptr) {

auto downcasted = std::dynamic_pointer_cast<D>(ptr);

assert(downcasted);

auto cloned = std::make_shared<D>(*downcasted);

auto upcasted = std::static_pointer_cast<B>(cloned);

return upcasted;
}

int main() {
auto bd = std::static_pointer_cast<Base>(std::make_shared<Derived>(Derived()));
auto bdd = std::static_pointer_cast<Base>(std::make_shared<DoubleDerived>(DoubleDerived()));
auto dd = std::static_pointer_cast<Derived>(std::make_shared<DoubleDerived>(DoubleDerived()));

std::cout << "-----------------Original ptrs--------------------" << std::endl;
std::cout << bd->me() << std::endl;
std::cout << bdd->me() << std::endl;
std::cout << dd->me() << std::endl;

auto bd_clone = clone<Base, Derived>(bd);
auto bdd_clone = clone<Base, DoubleDerived>(bdd);
auto dd_clone = clone<Derived, DoubleDerived>(dd);

std::cout << "------------------Cloned ptrs--------------------" << std::endl;
std::cout << bd_clone->me() << std::endl;
std::cout << bdd_clone->me() << std::endl;
std::cout << dd_clone->me() << std::endl;

}

2 ответов

16 просмотров

Вот это ты ништяк срезки делаешь

а если местами параметры поменяешь нужно будет только один из них писать

Похожие вопросы

Обсуждают сегодня

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта