Modernes C++ programmieren

Okt 23, 2024

lst-0682-book.cpp

// https://godbolt.org/z/sbxojqjqs 
namespace lits {
  // Templatehilfsfunktion für ein Argument
  template<char C> int bin();  // allgemeiner Fall
  template<>       int bin<'1'>() { return 1; } // Spezialisierung.
  template<>       int bin<'0'>() { return 0; } // Spezialisierung.
  // Templatehilfsfunktion ab zwei Argumente
  template<char C, char D, char... ES>
  int bin() {
    return bin<C>() << (sizeof...(ES)+1) | bin<D,ES...>(); // Bit-Shift, Bit-Oder
  }
  // eigentlicher operator""
  template<char...CS> int operator"" _bin()
    { return bin<CS...>(); };
}
int main() {
  using namespace lits;
  int eins = 1_bin;
  int acht = 1000_bin;
  int neun = 1001_bin;
  int zehn = 1010_bin;
  int elf  = 1011_bin;
  int hundertachtundzwanzig = 10000000_bin;
}