C++ - Vorlagen: Wählen Sie verschiedene Typen basierend auf dem Wert der template-parameter
Wie kann ich Folgendes in C++, und was ist zu tun, solche Dinge genannt?
template <bool S>
class NuclearPowerplantControllerFactoryProviderFactory {
//if S == true
typedef int data_t;
//if S == false
typedef unsigned int data_t;
};
- Es gibt zwei viele
Factory
Wörter in diese Klasse der name, ich glaube, du denkst in Java. - Nein, Sie müssen Ihren controller die Fabrik-provider Fabriken in allen Sprachen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Durch Spezialisierung:
Können Sie wählen, um einem der beiden Fälle die primäre Vorlage und der andere Spezialisierung, aber ich bevorzuge diese eher symmetrischen version, da
bool
können nur zwei Werte haben.Wenn dies das erste mal, wenn Sie sehen können, können Sie auch wie zu denken teilweise Spezialisierung:
Als @Nawaz sagt, der einfachste Weg ist wahrscheinlich zu
#include <type_traits>
und sagen:template <typename U> struct remove_pointer<T*> { typedef U type; };
?@Kerrek hat, beantwortet die Frage ausreichend, aber das kann auch mehr sein, allgemein wie folgt:
Und Verwendung als:
Wenn
S
stimmt, die ersten Typ-argument inselect
ausgewählt werden, sonst zweite argument type ausgewählt werden. Es ist generisch, weil Sie angeben, beide Arten inselect<>
, und basierend auf dem Wert des booleanselect<b,T,U>::type
gibt entweder den ersten Typ oder einem zweiten Typ.std::conditional
🙂<type_trait>
Bibliothek und sehen Sie all die wunderbaren Werkzeuge, die sind schon gemacht für Sie zu nutzen 🙂