//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/jYsbxqzYW
#include <format>
#include <string>
#include <vector>
#include <iostream>
struct Elb {
std::string name;
int geb;
std::string epoche;
std::string volk;
};
template<> struct std::formatter<Elb> {
std::formatter<std::string> sub_fmt;
constexpr auto parse(std::format_parse_context& pctx) {
return sub_fmt.parse(pctx); // liefert iterator auf '}'
}
auto format(const Elb& elb, std::format_context& fctx) const {
std::string s = std::format("{}/{} ({} {})",
elb.name, elb.volk, elb.geb, elb.epoche);
return sub_fmt.format(s, fctx); // formatieren delegieren
}
};
int main() {
std::vector<Elb> elben{
{"Feanor", 1169, "EZ", "Nordor"},
{"Galadriel", 1362, "EZ", "Noldor"},
{"Legolas", 87, "DZ", "Sindar"},
{"Elrond", 532, "EZ", "Halbelb"},
{"Elwe", 1050, "EZ", "Sindar"},
};
for (const auto& e : elben) {
std::cout << std::format("Elb: {:>20}", e) << std::endl;
}
}