Usos de um cabeçalho de promoção aritmética em C ++
Venho brincando com um conjunto de modelos para determinar o tipo de promoção correto, considerando dois tipos primitivos em C ++. A idéia é que, se você definir um modelo numérico personalizado, poderá usá-los para determinar o tipo de retorno, digamos, da função operador + com base na classe passada para os modelos. Por exemplo:
// 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);
}
Se você usar esses modelos de promoção, poderá tratar mais ou menos seus tipos definidos pelo usuário como se fossem primitivos, com as mesmas regras de promoção aplicadas a eles. Então, acho que a pergunta que tenho é: isso seria algo que poderia ser útil? E, se sim, que tipos de tarefas comuns você gostaria que fossem modeladas para facilitar o uso? Estou trabalhando no pressuposto de que apenas ter apenas os modelos de promoção seria insuficiente para adoção prática.
Aliás, o Boost tem algo semelhante no cabeçalho de matemática / ferramentas / promoção, mas é realmente mais para obter valores prontos para serem passados para as funções matemáticas C padrão (que esperam 2 ints ou 2 duplos) e ignora todos os tipos integrais. É algo tão simples preferível a ter controle completo sobre como seus objetos estão sendo convertidos?
TL; DR: Quais tipos de modelos auxiliares você esperaria encontrar em um cabeçalho aritmético de promoção além do mecanismo que faz a própria promoção?