Sto lavorando con una libreria che espone un'interfaccia con cui lavorare. Una delle funzioni di questa libreria è come questo:Passare una variabile come argomento modello
template <int a>
void modify(){}
devo modificare i parametri da 1 a 10 cioè chiamata modify
con con argomenti di template da 1 a 10. Per questo ho scritto questo codice (una versione di base di codice, il codice reale è molto più grande).
for(int i=0; i<10; i++){
modify<i>();
}
Sulla compilation ricevo il seguente errore
error: 'i' cannot appear in constant-expression
Dopo aver attraversato alcuni link su internet, sono venuto a sapere che non posso passare qualsiasi valore come argomento di un template che non viene valutata al momento della compilazione . La mia domanda è la seguente: 1. Perché il compilatore non può valutare i
in fase di compilazione? 2. C'è altro per raggiungere l'obiettivo che sto cercando di ottenere senza modificare l'interfaccia API?
C'è un'altra cosa che voglio fare. Chiama modifica come modifica dove VAR è l'output di alcuni calcoli funzionali. Come lo posso fare?
+1. Stavo per pubblicare quasi la stessa risposta. – Nawaz
@Emilio C'è un modo per chiamare modificare dove VAR è una variabile restituita da qualche calcolo funzionale, diciamo VAR = f()? – gibraltar
@gibraltar: Solo se è C++ 11 e la funzione è contrassegnata come 'constexpr' (allora puoi semplicemente scrivere' modify '). E nota che le regole per constexpr sono piuttosto severe. –