Re: Простая задачка обощённого программирования
От: rg45 СССР  
Дата: 17.10.19 14:56
Оценка: +3
Здравствуйте, Kernan, Вы писали:

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>, если нужно, предоставляешь специализации. В операторе дергаешь виртуальную функцию.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 17.10.2019 15:00 rg45 . Предыдущая версия . Еще …
Отредактировано 17.10.2019 14:58 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.