Код как для статического, так и для динамического полиморфизма на C++? ⇐ C++
-
Гость
Код как для статического, так и для динамического полиморфизма на C++?
Есть ли способ написать следующий код:
IConnection s{Socket{...}}; // статически Соединение* c = новый сокет {...}; //динамически // гетерогенный список, требующий динамической отправки /экзистенциального типа/ стирания типа List l {новый сокет{...} , новый MockSock{...}, новый LocalDataBase{...}, ...} Я пытался реализовать класс, подходящий как для динамического, так и для статического полиморфизма на основе необходимости стирания, то есть использовать динамический полиморфизм только в случае необходимости (например, гетерогенный список). Я пишу следующий код
класс Connection { публика: Соединение& оператор=(Соединение& c) = удалить; Соединение(Соединение& c) = удалить; Connection& оператор=(Соединение&& c) = удалить; Соединение(Соединение&& c) = удалить; виртуальное ~Соединение() = 0; виртуальная строка Recv() = 0; } шаблон класс IConnection: Соединение { публика: встроенная отправка T*(){ вернуть static_cast(это); } переопределение виртуальной строки Recv() { возврат отправки()->Recv(); } ... } Однако, если я реализую class Socket :IConnection, то Recv() в class Socket все равно будет динамическая отправка.
Есть ли способ написать следующий код:
IConnection s{Socket{...}}; // статически Соединение* c = новый сокет {...}; //динамически // гетерогенный список, требующий динамической отправки /экзистенциального типа/ стирания типа List l {новый сокет{...} , новый MockSock{...}, новый LocalDataBase{...}, ...} Я пытался реализовать класс, подходящий как для динамического, так и для статического полиморфизма на основе необходимости стирания, то есть использовать динамический полиморфизм только в случае необходимости (например, гетерогенный список). Я пишу следующий код
класс Connection { публика: Соединение& оператор=(Соединение& c) = удалить; Соединение(Соединение& c) = удалить; Connection& оператор=(Соединение&& c) = удалить; Соединение(Соединение&& c) = удалить; виртуальное ~Соединение() = 0; виртуальная строка Recv() = 0; } шаблон класс IConnection: Соединение { публика: встроенная отправка T*(){ вернуть static_cast(это); } переопределение виртуальной строки Recv() { возврат отправки()->Recv(); } ... } Однако, если я реализую class Socket :IConnection, то Recv() в class Socket все равно будет динамическая отправка.
Мобильная версия