Vi que @GMan implementó a version of sizeof...
para plantillas variadic que (hasta donde puedo decir) es equivalente al construido en sizeof...
. ¿Esto no va en contra del segundo principio de diseño: prefer libraries to language extensions?¿Por qué hay un operador sizeof ... en C++ 0x?
Respuesta
De Variadic Templates (Revision 3) (N2080=06-0150), página 6:
Aunque no es estrictamente necesario (podemos implementar
count
sin esta característica), el control de la longitud de un paquete de parámetro es una operación común que merece una sintaxis simple. Además, esta operación puede ser necesaria para las razones de verificación de tipos cuando las plantillas variadas se combinan con conceptos; ver la Sección 3.3.
(Sección 3.3 habla de conceptos que es ahora irrelevante.)
sizeof...
es solo azúcar, creo.
sizeof
es de hecho el corazón del lenguaje como es ...
, y aunque podría existir una función countof
ya tenemos sizeof
y ...
reservados por lo que bien podría hacer que sea conveniente para obtener el recuento de esa manera.
Por el contrario, si sizeof
y ...
no se reservaron, la idea de agregar tal cosa probablemente habría fallado porque las nuevas palabras clave tienden a ser mal vistas. (Cuanto menos, mejor.)
- 1. operador sizeof() en C
- 2. por qué no hay sizeof en java
- 3. Operador sizeof C/C++: ¿Por qué sizeof ('a') devuelve valores diferentes?
- 4. ¿Por qué se considera sizeof a un operador?
- 5. Comportamiento del operador sizeof en C
- 6. No hay secuencias Unicode en C++ 0x? ¿Por qué?
- 7. ¿Por qué llamar al operador sizeof con dos argumentos?
- 8. ¿Por qué no hay operador || = en C/C++?
- 9. ¿Por qué no hay métodos swap() generados por el compilador en C++ 0x?
- 10. sizeof() estructuras desconocidas. ¿Por qué?
- 11. uso de operador sizeof
- 12. ¿Por qué no puedo usar sizeof() en un #if?
- 13. operador sizeof devuelve diferentes valores para c & C++?
- 14. ¿Hay un operador C# IN?
- 15. ¿Por qué sizeof (void) == 1?
- 16. ¿Por qué sizeof (string) == 32?
- 17. ¿por qué preferimos? a ?? operador en C#?
- 18. ¿por qué sizeof ('a') es 4 en C?
- 19. ¿Hay un bit equivalente a sizeof() en C?
- 20. ¿Por qué sizeof (int) es diferente de sizeof (int *)?
- 21. ¿Hay un operador de exponente en C#?
- 22. ¿Puede C++ 0x todavía asignar explícitamente con operador global nuevo?
- 23. ¿Por qué no se agregó el rendimiento a C++ 0x?
- 24. ¿Por qué no hay un operador [] para una lista estándar?
- 25. C char * sizeof gama
- 26. Diferencia entre C++ 0x lambdas y operador(), cierre y functor
- 27. ¿Por qué no hay bloqueos de ámbito para múltiples mutexes en C++ 0x o Boost.Thread?
- 28. ¿Por qué es -1> sizeof (int)?
- 29. ¿Qué es un operador sobrecargado en C++?
- 30. ¿Por qué sizeof parse struct members?
'' sizeof ... también se puede aplicar igualmente bien a la plantilla y los parámetros de la función paquetes. Entonces 'sizeof ... (T)' y 'sizeof ... (t)' funcionan igual de bien. Una solución basada en una biblioteca funcionaría con paquetes de parámetros de plantilla o función, pero no con ambos, creo. Porque una expansión produce una secuencia de tipos, y la otra expansión produce una secuencia de expresiones. Tal vez escribirlo como 'plantilla struct count;' y luego pasar el paquete como 'count ' podría funcionar. Dado que 'sizeof' puede manejar ambos tipos y expresiones que parecen funcionar, pero es claramente más feo :) –