• naur
    link
    fedilink
    Polski
    arrow-up
    1
    ·
    edit-2
    4 days ago

    W tym tygodniu komitet C++ zatwierdził mechanizm reflection w następnej wersji języka.
    Teraz można użyć jeszcze bardziej skomplikowanej składni, żeby zaimplementować rozwiązanie Sosa. :-D

    struct S { unsigned i:2, j:6; };
    
    consteval auto member_number(int n) {
      if (n == 0) return ^^S::i;
      else if (n == 1) return ^^S::j;
    }
    
    int main() {
      S s{0, 0};
      s.[:member_number(1):] = 42;  // Same as: s.j = 42;
      s.[:member_number(5):] = 0;   // Error (member_number(5) is not a constant).
    }
    

    Zabawne jest też to, że najnowsze propozycje rozszerzeń w C++ dosłownie odtwarzają w przykładach popularne biblioteki rustowe i pythonowe. Widać, kto obecnie wyznacza trendy w tej dziedzinie, a kto próbuje gonić resztę świata.