Eu tenho essa estrutura variável para determinar a soma do tamanho de todos os tipos passados:
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
A questão é: como modifico isso para permitir que ele funcione em um pacote de parâmetros vazio, para retornar 0
;
por exemplo TotalSizeOf<>::value
Atualmente, recebo o erro error: wrong number of template arguments (0, should be at least 1)
Eu só tenho C ++ 14 disponível.
Respostas:
Você simplesmente deve se especializar também para
<>
Exemplo:
fonte
Com o C ++ 17, você pode obter isso sem metaprogramação elaborada de modelos, usando expressões fold:
Isso também deve ser mais eficiente ao compilar (é claro que em tempo de execução, são os mesmos).
PS: Acabei de ler, que você só tem C ++ 14, mas deixará isso aqui, pois acho que é bom ver que somos menos obrigados a fazer TMP desajeitado nas versões mais recentes do C ++.
Adendo: menos elegante que o C ++ 17, mas o C ++ 14 e praticamente sem tmp
fonte