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.

El valor de un parámetro de función no puede ser usado como una constante en C++.

Eres un traductor de español que traduce documentos de tecnología de la información. Traduce lo siguiente al español. No traduzcas el código y el resultado en markdown.

void myFilter(int filter_length, int num_channels)
{
    IIR::Filter* f = new IIR::SmoothedFilterDesign
        <iir::rbj::design::lowpass, num_channels=""> (filter_length);
}

Estoy recibiendo el error que:

“la expresión debe tener un valor constante. El valor del parámetro ‘num_channels’ no se puede utilizar como constante”.

La clase SmoothedFilterDesign puede tomar hasta tres entradas como se muestra a continuación.

template <class designclass,="" int="" channels,="" class="" statetype="DirectFormII">
class SmoothedFilterDesign
    : public FilterDesign <designclass, channels,="" statetype="">

¿Cuál sería la forma más eficiente de superar este problema?</designclass,></iir::rbj::design::lowpass,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La solución más eficiente sería utilizar un parámetro de plantilla para num_channels en lugar de un parámetro de función regular. Esto permitiría que num_channels sea un valor constante en tiempo de compilación, lo cual es necesario para la instanciación de plantillas. El código modificado se vería como sigue:

    template <int num_channels="">
    void myFilter (int filter_length)
    {
        IIR::Filter* f = new IIR::SmoothedFilterDesign
            <iir::rbj::design::lowpass, num_channels=""> (filter_length);
    }
    
    // Llame a la función con un valor constante para num_channels
    myFilter<2>(10);
    

    Al hacer de num_channels un parámetro de plantilla, podemos pasar un valor constante para él al llamar a la función. Este valor será conocido en tiempo de compilación y se puede usar para la instanciación de plantillas.</iir::rbj::design::lowpass,>

Comments are closed.