Czy istnieje sposób losowego wyboru elementu z wyliczenia w sposób bezpieczny dla typu?Losowo wybierz element z wyliczenia w sposób bezpieczny dla wersji z najnowszym C++
Najlepszym sposobem, aby to osiągnąć, jest wprowadzenie wartości terminatora jako ostatniego elementu wyliczenia, aby wiedzieć, ile jest wartości, a następnie wygenerować losową liczbę całkowitą w odpowiednim zakresie, który rzucić do enum. Ale wartość terminatora nic nie reprezentuje, więc masz nieważną wartość wyliczenia, a to nie jest bezpieczne. Czy istnieje lepszy sposób na to w najnowszych standardach C++?
ciekawe pytanie, ale to wszystko sprowadza się do „istnieje uniwersalny typu bezpieczny sposób określania ilu wartości w enum?” , a odpowiedź na to, niestety, nie. Standardowym idiomem jest, jak wspomniałeś, uwzględnienie w wyliczeniu wartości wartownika, ale zgadzam się, że to jest brzydkie. Twoim jedynym rozwiązaniem byłoby napisanie niestandardowej klasy, która reprezentowałaby twoje wyliczenie, zapewniając jakąś niejawną konwersję, ale to prawie na pewno jest zbyt zaawansowane. Poza tym robi się gorzej, niż na pierwszy rzut oka wydaje się, że wartości w enumie nie muszą być liniowo rosnące; mogą występować skoki i nieciągłości. –