Es tut mir leid, das klingt wie eine allgemeine Frage, ich konnte die Antwort auf mein Problem nicht finden, soweit ich sah. Der nächste Beitrag wäre dieser: Template Specialization for basic POD onlyTyp Konflikt in Vorlage Operator Überladung
Sagen wir, ich habe eine Klasse template <class T> class A {...};
, und ich möchte Operator + als interne Binäroperators zu überlasten (zwei Objekte vom Typ A), und als gemischter Binäroperators (Objekt des Typs A und numerischer POD-Typ).
Idealerweise was würde Ich mag schreiben ist:
#include <type_traits>
using namespace std;
// Declare/fine template
template <class T> class A {...};
// Internal binary operator
template < class T, class U >
A< typename common_type<T,U>::type >
operator+ (const A<T> &a, const A<U> &a) { ... }
// Mixed binary operator
template < class T, class U >
A< typename common_type<T,U>::type >
operator+ (const A<T> &a, const U &b) { ... }
Aber dann scheint es, wie die zweite Definition in Konflikt mit dem ersten ist. Mit der zweiten Definition weiß ich, wie man sicherstellt, dass U ein numerischer POD-Typ ist, das ist nicht der Punkt. Wenn ich so gehe, ist das Problem, dass ich keine Möglichkeit habe zu wissen, welcher zugrundeliegende Schablonentyp in U eingeschlossen ist.
Bitte sagen Sie mir, wenn meine Frage nicht klar genug ist, und danke im Voraus! :)
EDIT: Die Template-Spezifikation wurde durch den HTML-Filter gelöscht, in meinem letzten Satz "U, wenn es einige A<T>
" ist. Kurz gesagt, T ist versteckt.
'template,> U :: Wert, leer> :: type> A :: type> operator + (const A & a, const U &b); 'sollte den Trick machen. –
Morwenn
Was meinst du mit" zugrunde liegenden Vorlagentyp in U eingeschlossen? "Der gemischte Operator würde nicht wählen, wenn U' A 'weil das interne ist eine bessere Übereinstimmung.Wollen Sie den Fall 'A < A>' in der internen Operator behandeln? –
pmr
Vielen Dank für Ihre Hilfe. pmr, Sie haben Recht, das Problem passiert eigentlich vorher, wegen common_type.So gibt es keine gemeinsame Geben Sie zwischen 'A' und U, wir ein Bort vor dem besten Spiel kann beurteilt werden. Morwenn, deine Lösung sieht aus wie etwas, das ich versucht habe, ist aber in diesem Zusammenhang falsch; U könnte 'A
' mit S sein!= T, und ich sollte noch in der Lage sein, die Operation durchzuführen. – Sheljohn