In einem Projekt habe ich eine Möglichkeit gefunden, DRY zu bleiben, da eine Menge Code mit Ausnahme einiger kleiner Teile für Template-Spezialisierungen einer Vorlage gleich bleiben kann. Hier ist ein kleines Arbeitsbeispiel, was ich zur Zeit mache ich das Templat-Klasse zu überprüfen bin mit:std :: ist gleichbedeutend für unspezialisierte Schablonentypen
template<typename T>
class A{};
template<typename T>
class B{};
template<template<class> class C>
void do_stuff()
{
if(std::is_same<A<int>,C<int>>::value)
{
// Do Stuff for A
} else if(std::is_same<B<int>,C<int>>::value)
// Do Stuff for B
}
}
int main()
{
do_stuff<A>();
}
Was würde Ich mag stattdessen zu tun ist
std::is_same<A,C>::value
unter Verwendung die Schablone, um zu bestimmen Art. Gibt es irgendeine Funktion, die mir helfen könnte oder fehlt mir ein Muster, das in diesem Fall besser funktioniert?
Ich sehe, dass ich so etwas wie
template<template<class> class C, typename T>
void do_stuff();
do_stuff<A,T>();
tun könnte, aber das scheint wie der falsche Weg für mich zu tun.
Es kann sich lohnen, unter Hinweis darauf, dass unter den aktuellen Sprachregeln, wenn ein Argument ist ein Alias-Vorlage wie 'Vorlage mit B A =;', 'is_same_template ' wird 'false_type'. Viele Menschen finden dies zunächst kontraintuitiv. –
bogdan
@bogdan Danke, ich habe eine Notiz hinzugefügt. – TartanLlama