2014-06-30 18 views
6

przypuszczam to jest trywialne dla ludzi, którzy wiedzą, szablony ...różne implementacje klasy w oparciu o parametr szablonu

Załóżmy, że chcemy dwie różne implementacje tej klasie szablonu, w zależności od wartości N:

template <int N> 
class Foo { 
    ... 
}; 

na przykład:

template <int N> 
class Foo { 
    ... // implementation for N <= 10 
}; 

template <int N> 
class Foo { 
    ... // implementation for N > 10 
}; 

Jak możemy to zrobić w C++ 11?

Odpowiedz

19

Użyj dodatkowy parametr szablonu o wartości domyślnej odróżnić przypadki:

template <int N, bool b = N <= 10> 
class Foo; 

template <int N> 
class Foo<N, true> { 
    ... // implementation for N <= 10 
}; 

template <int N> 
class Foo<N, false> { 
    ... // implementation for N > 10 
}; 
+0

To sprytny pomysł –

+1

Korzystanie z 'std :: warunkową , FooBaseMore > :: typ "jako klasa podstawowa również by działała. Ale jest o wiele ładniejszy, +1. – Niall

+1

Dziękuję za: 1. Odpowiadanie zwięźle i bardzo użytecznie, 2. Nie pytając "Dlaczego chcesz to zrobić?". – user1387866

Powiązane problemy