У меня есть шаблонная функция в C ++, которая сериализует итерируемое:
template<typename Stream, typename Iter, typename Infix, typename Closure>
inline Stream &stream_iterable(Stream &os, Iter from, Iter to, Infix infix_, Closure open, Closure close) {
if (from == to) return os;
os << open << *from;
for (++from; from != to; ++from) {
os << infix_ << *from;
}
os << close;
return os;
}
Для примера она в основном конвертирует std::vector<int>{1,2}
в строку "[1,2]"
Я хотел бы проверитьтип объекта, на который указывает итератор, и если он равен std::string
, я хотел бы использовать std::quoted
для добавления кавычек вокруг элементов вектора, что-то вроде этого:
template<typename Stream, typename Iter, typename Infix, typename Closure>
inline Stream &steam_iterable_quoted(Stream &os, Iter from, Iter to, Infix infix_, Closure open, Closure close) {
if (from == to) return os;
os << open << std::quoted(*from);
for (++from; from != to; ++from) {
os << infix_ << std::quoted(*from);
}
os << close;
return os;
}
Какможно проверить тип (* из) и объединить эти две функции в одну?