假设元组应该以逗号分隔的形式输出:
#include <iostream>
#include <tuple>
template <typename TupleT, std::size_t... Is>
void printTupleImp(const TupleT& tp, std::index_sequence<Is...>) {
size_t index = 0;
std::cout << "(";
( ((index++ > 0 ? (std::cout << ", ", true) : true),
void(std::cout << std::get<Is>(tp))), ... );
std::cout << ")";
}
template <typename TupleT, std::size_t TupSize = std::tuple_size_v<TupleT>>
void printTuple(const TupleT& tp) {
printTupleImp(tp, std::make_index_sequence<TupSize>{});
}
int main() {
std::tuple tp { 10, 20, "hello"};
printTuple(tp);
}
输出:
(10, 20, hello)
看起来折叠表达式的优化非常有效编译器资源管理器。
有没有一种方法可以仅使用 fmt 来完成相同的操作,而不是先输出到ostream
,就像这里? 如果涉及
fmt::formatter
专业化,如何生成格式字符串?
范围和元组格式。
#include <fmt/ranges.h>
int main() {
std::tuple tp { 10, 20, "hello"};
// Prints "(10, 20, "hello")"
fmt::print("{}", tp);
}