Verwendung eines C ++ Arithmetic Promotion Headers

Ich habe mit einer Reihe von Vorlagen herumgespielt, um den richtigen Promotion-Typ bei zwei primitiven Typen in C ++ zu bestimmen. Die Idee ist, dass Sie, wenn Sie eine benutzerdefinierte numerische Vorlage definieren, anhand der an die Vorlagen übergebenen Klasse den Rückgabetyp von beispielsweise Operator + bestimmen können. Zum Beispiel:

// Custom numeric class
template <class T>
struct Complex {
    Complex(T real, T imag) : r(real), i(imag) {}
    T r, i;
// Other implementation stuff
};

// Generic arithmetic promotion template
template <class T, class U>
struct ArithmeticPromotion {
    typedef typename X type;  // I realize this is incorrect, but the point is it would
                              // figure out what X would be via trait testing, etc
};

// Specialization of arithmetic promotion template
template <>
class ArithmeticPromotion<long long, unsigned long> {
    typedef typename unsigned long long type;
}

// Arithmetic promotion template actually being used
template <class T, class U>
Complex<typename ArithmeticPromotion<T, U>::type>
operator+ (Complex<T>& lhs, Complex<U>& rhs) {
    return Complex<typename ArithmeticPromotion<T, U>::type>(lhs.r + rhs.r, lhs.i + rhs.i);
}

Wenn Sie diese Promotion-Vorlagen verwenden, können Sie Ihre benutzerdefinierten Typen mehr oder weniger so behandeln, als wären sie Grundelemente, auf die dieselben Promotion-Regeln angewendet werden. Ich schätze, die Frage, die ich habe, ist, ob dies nützlich sein könnte. Und wenn ja, welche Art von allgemeinen Aufgaben sollten Sie zur Vereinfachung der Verwendung als Vorlage verwenden? Ich gehe davon aus, dass es für die praktische Anwendung unzureichend wäre, nur die Werbevorlagen zu haben.

Übrigens hat Boost etwas Ähnliches in seiner Kopfzeile math / tools / promotion, aber es dient eher dazu, Werte für die Übergabe an die Standard-C-Mathematikfunktionen vorzubereiten (die entweder 2 Zoll oder 2 Doppelte erwarten) und alle Integraltypen zu umgehen. Ist etwas so Einfaches der vollständigen Kontrolle über die Konvertierung Ihrer Objekte vorzuziehen?

TL; DR: Welche Arten von Hilfsvorlagen würden Sie in einem arithmetischen Promotion-Header erwarten, der über die Maschinerie hinausgeht, die die Promotion selbst durchführt?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage