Angenommen, ich habe die folgende Klasse:C++ deduziert template Argumente auf der Grundlage anderer Vorlage Argumente
template <class T, class U, class V> Foo
{
...
};
Die Template-Parameter haben eine deutliche Abbildung, so dass ich die anderen Template Argumente ableiten U und V auf Basis welcher T ist . Zum Beispiel, wenn T doppelt ist, werden U und V immer einige Klassen D1 und D2 sein, und wenn T float ist, werden U und V immer einige andere Klassen F1 und F2 sein.
Mit diesem Hintergedanken, gibt es eine Möglichkeit, dass ich nur ein Template-Argument übergeben kann, und der Compiler die anderen beiden Parameter ableiten?
Ich weiß, die einfache Antwort wäre, diese anderen Klassen auch templated zu machen und das Vorlagenargument T an sie zu übergeben, aber ich bin nicht in der Lage, diese Klassen templated zu machen (sie werden automatisch von einem Werkzeug generiert).
Idealerweise würde ich in der Lage sein, wie so typedef oder #define zu verwenden:
typedef Foo<double> Foo<double, D1, D2>
typedef Foo<float> Foo<float, F1, F2>
jedoch diese nicht kompilieren. Ich frage mich, ob es eine Möglichkeit gibt, Template-Metaprogrammierungs- oder Template-Template-Parameter zu verwenden, um dieses Problem zu lösen, aber ich kann meinen Kopf nicht mit diesen Konzepten umhüllen, und ich habe das Gefühl, dass es eine noch einfachere Antwort gibt. Hat jemand Ideen?
Danke! Das funktioniert perfekt. – thompsonja
@thompsonja: Froh, dass es geholfen hat :-) –