Evaluación constante del argumento de la plantilla
1. ¿Por qué el compilador no puede evaluar 'i' en tiempo de compilación?
La evaluación en tiempo de compilación requiere que se conozca el valor de 'i' antes de que se ejecute el programa. Sin embargo, en el código proporcionado, 'i' es una variable de bucle que cambia durante la ejecución del programa. El compilador no puede determinar el valor de 'i' en el momento de la compilación porque es un valor asignado dinámicamente.
2. ¿Puedo lograr el objetivo sin modificar la interfaz API?
Sí, puede usar la especialización de plantilla para crear una función recursiva que recorra en iteración el rango de argumentos de la plantilla. Por ejemplo, podrías crear una función:
template
void modify_recursive() {
// Call modify with template argument 'i'
modify();
// Recursively call modify_recursive with the next template argument
if (i ();
}
}
Llamar a 'modify' con un argumento no constante
Para llamar a 'modify' con un valor que no es una constante de tiempo de compilación, puedes usar un técnica llamada metaprogramación de plantillas. Un enfoque es crear una clase de plantilla que tome un objeto de función como argumento y lo invoque con el valor deseado:
template
struct InvokeWithParam {
InvokeWithParam(F f, int param) : f(f), param(param) {}
void operator()() { f(param); }
F f;
int param;
};
Luego puede pasar una instancia de InvokeWithParam como argumento de plantilla para modificar:
int var = 5;
modify();
Esto invocará la función de modificación con el valor de var.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3