Можно ли передать оператору потоковой отладки список разнородных типов, которые можно преобразовать?
string str("blabla");
std::cout << {"A", 3, str} << std::endl;
Я думаю, это может быть возможно с чем-то вроде шаблона variadic? Я хочу оператора << вызвать каждый из элементов в списке и добавить запятую.
Вы не можете использовать список инициализаторов для разнородных типов, но std::tuple
в порядке
Убедитесь, что нет ненужных копий. Вот решение с использованием C ++ 17.
#include <tuple>
#include <string>
#include <iostream>
template<class... Ts>
std::ostream&
operator<<(std::ostream &os, std::tuple<Ts...> &&tp)
{
auto lam = [&] (auto &&arg0, auto&& ...args) -> auto&& {
os << arg0;
([&] (auto&& arg) {
os << ", " << arg;
} (args), ...);
return os;
};
return std::apply(lam, std::move(tp));
}
int main() {
std::string str("blabla");
std::cout << std::forward_as_tuple("A", 3, str) << std::endl;
}
Других решений пока нет …