Я понимаю, что boost::variant
реализуется нечто вроде такКак оператор << с буст :: вариант реализуется
template <typename... Vs>
struct variant {
std::aligned_union<Vs...>::type buffer;
....
};
Как мы можем сделать operator<<
для структуры, как это, что печатает слепков тип хранящийся в буфер и передает это значение operator<<
для cout
? Для этого нам нужно будет знать тип элемента, сохраненного в буфере, вправо? Есть ли способ узнать это?
Также я ищу объяснение такой реализации, если таковая существует. Не только, что он существует, и как я могу его использовать.
Спасибо за ваш ответ! Не могли бы вы объяснить это немного больше, пожалуйста. Я не совсем понял, что происходит ... Как «ostream_visitor» знает, что это за тип варианта? Функция 'T' в функции, похоже, просто разрешает тип' boost :: variant '. –
Curious
@ Curious Нет, это определенно нет. Прочтите учебник, все это довольно хорошо объяснено там. – Barry
Спасибо. Я поддержал ваш ответ. Я прочитаю его. Но в функторе вы просто проходите в варианте типа правильно? Как повысить уровень знаний о том, какой тип объекта находится в переменной? Я хотел больше рассказать о том, как повысилось это повышение. – Curious