es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿No llama la instancia de la función a una plantilla variádica?

He escrito una función para deducir cuántos parámetros estoy enviando a una función. Algo como esto:

template<typename arg="">
constexpr sizet getinitsize(Arg arg, sizet i) {
    return i + 1;
}

template<typename t,="" typename="" ...="" args="">
constexpr sizet getinitsize(T Firstarg, Args ... args, sizet i) {
    return getinit_size(args... , i + 1);
}

auto createipv4header() {
    sizet x = getinitsize(0b01, 0b10, 0b01, staticcast<sizet>(0));
    return x //<= debe devolver 3
}

Pero el compilador devuelve el error:
**error: no matching function for call to 'get_init_size(int, int, int, size_t)'**
¿Entonces el problema está en la plantilla variadica? ¿Y una última cosa, si cambio la plantilla variadica a algo como esto:

template<typename t,="" typename="" ...="" args="">
constexpr sizet getinitsize(T Firstarg, Args ... args, sizet i = 0)

¿Puedo omitir el último parámetro? (No lo he probado con plantillas variáticas). ¡Gracias por la ayuda!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la plantilla variádica. Puedes intentar cambiar la plantilla para incluir un valor predeterminado para el parámetro i, así:

    template
    constexpr size_t get_init_size(T Primer_arg, Args ... args, size_t i = 0)

    Esto debería permitirte omitir el último parámetro al llamar a la función.

Comments are closed.