Pracuję z biblioteką, która udostępnia interfejs do pracy. Jedną z funkcji tej biblioteki jest tak:Przekazywanie zmiennej jako argumentu szablonu
template <int a>
void modify(){}
muszę zmodyfikować parametry od 1 do 10 czyli rozmowy modify
z argumentami szablonu od 1 do 10. W przypadku, że napisałem ten kod (podstawowa wersja kod, rzeczywisty kod jest znacznie większy).
for(int i=0; i<10; i++){
modify<i>();
}
Na kompilacji otrzymuję następujący błąd
error: 'i' cannot appear in constant-expression
po przejściu przez kilka linków w internecie, poznałem, że nie mogę przekazać żadnej wartości jako szablon argument, który nie jest analizowany w czasie kompilacji . Moje pytanie jest następujące: 1. Dlaczego kompilator nie może oszacować wartości i
podczas kompilacji? 2. Czy istnieją inne cele, które można osiągnąć bez zmieniania interfejsu API?
Jest jeszcze jedna rzecz, którą chcę zrobić. Call modyfikuj jako modyfikuj, gdzie VAR jest wynikiem niektórych funkcjonalnych obliczeń. Jak mogę to zrobić?
+1. Zamierzałem zamieścić prawie tę samą odpowiedź. – Nawaz
@Emilio Czy istnieje sposób na wywołanie modyfikacji gdzie VAR jest zmienną zwracaną przez niektóre obliczenia funkcjonalne, powiedzmy VAR = f()? – gibraltar
@gibraltar: Tylko jeśli jest to C++ 11, a funkcja jest oznaczona jako "constexpr" (niż możesz po prostu napisać 'modify'). Zauważ, że zasady dotyczące constexpr są dość surowe. –