Estoy trabajando con una biblioteca que expone una interfaz para trabajar. Una de las funciones de esta biblioteca es así:Pasar una variable como argumento de plantilla
template <int a>
void modify(){}
tengo que modificar los parámetros del 1 al 10, es decir la llamada modify
con argumentos de plantilla con de 1 a 10. Para que escribí este código (una versión básica de código, el código real es mucho más grande).
for(int i=0; i<10; i++){
modify<i>();
}
En la compilación recibo el siguiente error
error: 'i' cannot appear in constant-expression
Después de pasar a través de algunos enlaces en internet, llegué a saber que no puedo pasar cualquier valor como parámetro de plantilla que no se evalúa en tiempo de compilación . Mi pregunta es la siguiente: 1. ¿Por qué el compilador no puede evaluar i
en tiempo de compilación? 2. ¿Hay algún otro para lograr el objetivo que estoy tratando de lograr sin cambiar la interfaz API?
Hay otra cosa que quiero hacer. Llamar modificar como modificar donde VAR es el resultado de algún cálculo funcional. ¿Cómo puedo hacer eso?
+1. Iba a publicar casi la misma respuesta. – Nawaz
@Emilio ¿Hay alguna manera de llamar a modificar donde VAR es una variable devuelta por algún cálculo funcional, digamos VAR = f()? – gibraltar
@gibraltar: solo si es C++ 11 y la función está marcada como 'constexpr' (que simplemente puede escribir' modificar '). Y tenga en cuenta que las reglas para constexpr son bastante estrictas. –