2014-06-30 4 views
6

Ich nehme an, das für die Menschen trivial ist, die Vorlagen kennen ...verschiedene Klassenimplementierungen basierend auf Template-Parameter

Angenommen, wir wollen zwei verschiedene Implementierungen dieser Template-Klasse, je nach dem Wert von N:

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

Zum Beispiel:

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

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

Wie können wir tun, dass in C++ 11?

Antwort

19

ein zusätzlichen Template-Parameter mit einem Standardwert Anwendungsfälle zu unterscheiden:

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

Das ist eine clevere Idee –

+1

Mit einem 'std :: bedingten , FooBaseMore > :: type 'als eine Basisklasse würde auch funktionieren. Aber das ist viel besser, +1. – Niall

+1

Danke für: 1. Beantworten Sie kurz und sehr nützlich, 2. Nicht fragen "Warum möchten Sie das tun?". – user1387866