Hej Wszystkim,
Ostatnio czytając o meta programowaniu uruchomiłem fajny przykład wywołujący funkcję określoną ilość razy.
template <int N>
void Recurence()
{
Recurence <N-1>();
}
template <>
void Recurence <0>()
{
//warunki końcowe
}
int main()
{
Recurence <5>();
}
Jednak zastanawiam się, czy można iść dalej :) Czy można zrobić szablon wariadyczny, który przyjmie x argumentów i wywoła funkcję z ich wariacją. Czyli wywołanie np.
Funkcja (1,1);
Spowoduje rozpakowanie do funkcji do:
Funkcja(0,0);
Funkcja(1,0);
Funkcja(0,1);
Funkcja (1,1);
Wiadomo, że liczba wariacji będzie rosła potęgowo i w końcu włączy się ograniczenie kompilatora, ale warto spróbować dla samego doświadczenia. Próbuję się do tego zabrać, jednak ugrzązłem już na pierwszym etapie. Mam kilka pytań:
- Czy można zrobić szablon wariadyczny z określonym typem? A dokładnie z wieloma parametrami typu int.
- Jak wtedy ustalić warunki końcowe?
- Do ilu rekurencji kompilatory najczęściej ograniczają szablon? Nie chodzi mi o dokładną liczbę, tylko czy jest to bardziej 100, czy 10^20 :)
Będę wdzięczny za każdą podpowiedź związaną z tematem.
-ftemplate-depth=
, ale i tak, jak zbyt mocno zwiększymy to może się to skończyć segfaultem kompilatora - wtedy należy zwiększyć limit na stos (ulimit
). Jedyne co może bardziej powstrzymać, to koniec pamięci na komputerze.