Tengo esta estructura variada para determinar la suma del tamaño de todos los tipos pasados:
template <typename U, typename... T> struct TotalSizeOf
: std::integral_constant<size_t, sizeof(U) + TotalSizeOf<T...>::value> {};
template <typename U> struct TotalSizeOf<U>
: std::integral_constant<size_t, sizeof(U)> {};
Uso:
TotalSizeOf<double, int, char>::value
La pregunta es, ¿cómo modifico esto para permitir que funcione en un paquete de parámetros vacío 0
?
p.ej TotalSizeOf<>::value
Actualmente recibo el error error: wrong number of template arguments (0, should be at least 1)
Solo tengo C ++ 14 disponible.
Respuestas:
Simplemente debes especializarte también para
<>
Ejemplo:
fuente
Con C ++ 17 puede obtener esto sin metaprogramación de plantilla elaborada, utilizando expresiones de plegado
Esto también debería ser más eficiente al compilar (por supuesto, en tiempo de ejecución, son lo mismo).
PD: Acabo de leer que solo tienes C ++ 14, pero dejaré que esto permanezca aquí, ya que creo que es agradable ver que estamos menos obligados a hacer TMP incómodo en las nuevas versiones de C ++.
Anexo: Menos elegante que C ++ 17, pero C ++ 14 y prácticamente libre de tmp
fuente