Modernes C++ programmieren

Okt 23, 2024

lst-0894-godb.cpp

//#(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;
  }
}