Gibt es eine Möglichkeit, die Vorlage aus einer Vorlagenspezialisierung zu erhalten? Z.B. std::unordered_map
von einer Variablen des Typs std::unordered_map<char, char>
, die als Vorlagevorlagenparameter übergeben werden soll.Vorlage aus Vorlagenspezialisierung
Minimal Beispiel:
#include <unordered_map>
template <template <class ...> class t_map>
class A
{
public:
typedef t_map <int, int> map_type;
};
int main(int argc, char const **argv)
{
std::unordered_map<char, char> map;
// decltype yields std::unordered_map<char, char> (as expected).
typename A<decltype(map)>::map_type map_2;
return 0;
}
Es hängt davon ab, was Sie mit der Vorlage tun mögen. Im Allgemeinen können Sie Typen aber keine Vorlagen weitergeben. Was Sie möglicherweise tun können, ist die Template-Parameter zu ersetzen. Kannst du mehr Kontext geben? – MarkusParker
Ich habe ein paar Klassen, die (aus Gründen der Polymorphie) einen Template-Template-Parameter nehmen und daraus eine Spezialisierung machen. Die Klassen stellen eine minimale Schnittstelle zu einem Kartentyp-Container bereit. Man nimmt eine 'std :: map', eine andere einen' std :: vector' und implementiert perfektes Hashing. Um eine Anzahl von Spezialisierungen der Klassen zu testen, wäre es zweckmäßig, eine Funktion zu schreiben, die nur einen Modellcontainer (z.B. "std :: map") aufnehmen würde, dessen Vorlage dann an meine Klasse übergeben würde. –
tsnorri