Сообщение Re: Простая задачка обощённого программирования от 17.10.2019 14:56
Изменено 17.10.2019 15:00 rg45
Re: Простая задачка обощённого программирования
Здравствуйте, Kernan, Вы писали:
K>Дело такое,
K>Если простая реализация класса any которая хранит своё представление через pimpl и type erasure. Мне неоходимо перегрузить оператор вывода << для any чтобы в своём формате выводить impl::T. всего типов 3, один из них std::string.
K>Как это сделать без РТТИ?
K>Концептуально это так выглядит
K>
Добавляешь в placeholder объявление чисто виртуальной функции вывода в поток и реализуешь ее в каждом наследнике impl<T>. В операторе дергаешь виртуальную функцию.
K>Дело такое,
K>Если простая реализация класса any которая хранит своё представление через pimpl и type erasure. Мне неоходимо перегрузить оператор вывода << для any чтобы в своём формате выводить impl::T. всего типов 3, один из них std::string.
K>Как это сделать без РТТИ?
K>Концептуально это так выглядит
K>
K>struct any
K>{
K> ...
K> struct placeholder
K> {
K> virtual ~placeholder() {}
K> }
K> template<class T>
K> struct impl: public placeholder
K> {
K> T value;
K> }
K>}
K>operator<<(any& a)
K>{
K> os << a.imp.value;
K>}
K>
Добавляешь в placeholder объявление чисто виртуальной функции вывода в поток и реализуешь ее в каждом наследнике impl<T>. В операторе дергаешь виртуальную функцию.
Re: Простая задачка обощённого программирования
Здравствуйте, Kernan, Вы писали:
K>Дело такое,
K>Если простая реализация класса any которая хранит своё представление через pimpl и type erasure. Мне неоходимо перегрузить оператор вывода << для any чтобы в своём формате выводить impl::T. всего типов 3, один из них std::string.
K>Как это сделать без РТТИ?
K>Концептуально это так выглядит
K>
Добавляешь в placeholder объявление чисто виртуальной функции вывода в поток и реализуешь ее в каждом наследнике impl<T>, если нужно, предоставляешь специализации. В операторе дергаешь виртуальную функцию.
K>Дело такое,
K>Если простая реализация класса any которая хранит своё представление через pimpl и type erasure. Мне неоходимо перегрузить оператор вывода << для any чтобы в своём формате выводить impl::T. всего типов 3, один из них std::string.
K>Как это сделать без РТТИ?
K>Концептуально это так выглядит
K>
K>struct any
K>{
K> ...
K> struct placeholder
K> {
K> virtual ~placeholder() {}
K> }
K> template<class T>
K> struct impl: public placeholder
K> {
K> T value;
K> }
K>}
K>operator<<(any& a)
K>{
K> os << a.imp.value;
K>}
K>
Добавляешь в placeholder объявление чисто виртуальной функции вывода в поток и реализуешь ее в каждом наследнике impl<T>, если нужно, предоставляешь специализации. В операторе дергаешь виртуальную функцию.