Angenommen, ich habe eine enum, und ich möchte, dass jeder enum Wert mit einem bestimmten Typ zugeordnet werden. Nehmen wir an, der Standardtyp ist doppelt, und wenn ich möchte, dass es etwas anderes ist, muss ich es explizit angeben.Variadic Vorlagen Typ Eigenschaften Auflösung
Q1: Ist das der bevorzugte Weg, um so etwas zu implementieren?
enum A {
v1,
v2,
v3
};
// for every value of A, the standard type is double
template<A a>
struct A_info {
typedef double type;
};
// other types for certain values can be specified using specialization
template<>
struct A_info<v2> {
typedef size_t type;
};
Dann gehe ich davon einige Funktionsvorlage haben, und ich will je die Funktion aufgerufen werden von der Art mit einem Wert der Enumeration zugeordnet:
template<typename T>
void foo() { /* do something */ }
template<A a>
void bar() {
foo< typename A_info<a>::type >();
}
Dies funktioniert gut. Nehmen wir nun an, ich habe eine andere Funktion auf einer variadische Vorlagenliste abhängig, und ich möchte etwas ähnliches wie oben tun ...
template<typename ... T>
void foo_multiple() { /* stuff */ }
template<A ... a>
void bar_multiple() {
foo_multiple< /* ??? */ >();
}
Q2: Wie um dies zu implementieren? Ist das überhaupt möglich?
Das erste Beispiel eine 'typename' fehlt. –
Korrigiert das. Vielen Dank! – fdlm