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.

tipo de argumentos de entrada dependiendo de la plantilla booleana

Mi objetivo es simple, el tipo de dato de entrada depende del valor booleano de la plantilla:

template<bool isfloa="">
class example{
public:
  if (isfloa){
    example(float p){printf("sizeof p: %d\n", sizeof(p))};
  } else{
    example(uint64_t p){printf("sizeof p: %d\n", sizeof(p))};
  }
};

Esto no puede pasar la compilación y tengo la siguiente solución (no la he probado):

using dataType = isfloa ? float : uint64_t;
example(dataType p){printf("sizeof p: %d\n", sizeof(p))};

Me gustaría saber si esto funciona. ¿Hay alguna otra solución? Muchas gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La solución proporcionada debería funcionar siempre y cuando el parámetro de plantilla “isfloa” sea reemplazado por un valor booleano, ya que actualmente no está especificado. Otra posible solución sería utilizar un rasgo de tipo para determinar el tipo de datos correcto en función del valor booleano, como std::conditional:

    template<bool b="">
    class ejemplo {
    public:
        using TipoDatos = std::conditional_t<b, float,="" uint64_t="">;
        ejemplo(TipoDatos p) {
            printf("sizeof p: %d\n", sizeof(p));
        }
    };
    

    Esta solución evita la necesidad de una declaración condicional y hace que el código sea más conciso.</b,>

Comments are closed.