Widziałem, że @GMan zaimplementował a version of sizeof...
dla szablonów warstwowych, które (o ile wiem) są równoważne wbudowanemu sizeof...
. Czy nie jest to sprzeczne z drugą zasadą projektowania: prefer libraries to language extensions?Dlaczego istnieje operator sizeof ... w C++ 0x?
Odpowiedz
Od Variadic Templates (Revision 3) (N2080=06-0150), strona 6:
Chociaż nie jest to bezwzględnie konieczne (możemy realizować
count
bez tej funkcji), sprawdzając długość paczki parametru jest częstą operacją zasługuje na prostą składnię. Co więcej, operacja ta może stać się niezbędna ze względu na sprawdzanie typu, gdy szablony variadyczne są łączone z koncepcjami; patrz punkt 3.3.
(sekcja 3.3 mówi o koncepcji, które teraz nie ma znaczenia.)
sizeof...
to tylko cukier, myślę.
sizeof
jest rzeczywiście rdzeń języka jak ...
i chociaż countof
funkcja mogła istnieć już mamy sizeof
i ...
zastrzeżone więc równie dobrze możemy zrobić to wygodne, aby dostać się liczyć w ten sposób.
W przeciwieństwie do tego, jeśli sizeof
i ...
nie były zarezerwowane, pomysł dodania takiej rzeczy prawdopodobnie by się nie powiódł, ponieważ nowe słowa kluczowe są zwykle niezadowolone. (Im mniej tym lepiej).
- 1. sizeof() operator dla typów
- 2. operator sizeof zwraca różne wartości dla c & C++?
- 3. operator sizeof daje dodatkowy rozmiar struktury w C#
- 4. operator sizeof zwraca 4 dla (char + krótka)
- 5. Dlaczego sizeof jest operatorem?
- 6. Czy wymagany jest operator sizeof dla malloc?
- 7. operator kompilacji sizeof-time lub run-time
- 8. operator przyrost nie pracuje z sizeof
- 9. Dlaczego nie mogę użyć sizeof() w #if?
- 10. Zachowanie operatora sizeof w C
- 11. C++ 0x regex w GCC
- 12. sizeof() std :: vector (C++)
- 13. Dlaczego sizeof (void) == 1?
- 14. Czy istnieje prosty sposób implementacji AutoResetEvent w C++ 0x?
- 15. Niespójność cech lambda w kompilatorach C++ 0x
- 16. Dlaczego wartość rwartości w C++ 0x nie jest domyślna?
- 17. C++ 0x - Kiedy?
- 18. asynchroniczna funkcja C++ 0x
- 19. Wykrywanie trybu C++ 0x w Intel C++?
- 20. c język if z sizeof
- 21. Czy C++ 0x nadal może jawnie przydzielać operatorowi globalnemu nowy?
- 22. sizeof() część struktury C - sortowanie
- 23. C++ 0x emplace_back z non-copyable Rzeczy
- 24. sizeof (* this) w definicji klasy
- 25. C++ operator ":"
- 26. Dlaczego "gt = C++ 0x" jest nadal potrzebny dla g ++ 4.6.2?
- 27. C++ 0x | Dlaczego std :: atomic przeciąża każdą metodę za pomocą volatile-qualifier?
- 28. Implementacja dobrego C++ 0x error_condition?
- 29. C++ 0x obiektowe wnioskowanie obiektowe obiektu
- 30. C++ 0x lambdas styl kodowania
... '' sizeof można również zastosować równie dobrze do szablonu i parametrów funkcja opakowaniach. Więc 'sizeof ... (T)' i 'sizeof ... (t)' działają równie dobrze. Rozwiązanie oparte na bibliotece działa z pakietami parametrów lub szablonów, ale nie z obydwoma, jak sądzę. Ponieważ jedno rozwinięcie tworzy ciąg typów, a drugie rozwinięcie tworzy sekwencję wyrażeń. Może napisanie go jako 'struct struct count;' a następnie podanie pakietu jako 'count' może działać. Ponieważ 'sizeof' może obsłużyć oba typy i wyrażenia, które wydają się działać, ale jest wyraźnie brzydsze :) –