C++ 'da iki ilkel tür verilen doğru tanıtım türünü belirlemek için bir dizi şablonla uğraştım. Buradaki fikir şudur: Özel bir sayısal şablon tanımlarsanız, bunları şablonlara iletilen sınıfa göre operatör + işlevinin dönüş türünü belirlemek için kullanabilirsiniz. Örneğin: Bu promosyon şablonları kullanıyorsanızC++ Aritmetik Tanıtım Üstbilgisi Kullanımları
// 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);
}
, daha fazla veya daha az aynı promosyon kuralları kendilerine uygulanan ile ilkeller iseniz olarak kullanıcı türleri tanımlanmış tedavi edebilir. Yani, sanırım sahip olduğum soru bu yararlı olabilecek bir şey mi olacak? Ve eğer öyleyse, ne tür ortak görevler kullanım kolaylığı için şablonlandırılmak istersiniz? Sadece tanıtım şablonlarının tek başına pratikte benimsenmesi için yeterli olmayacağı varsayımı üzerinde çalışıyorum.
Boost, matematik/araç/tanıtım başlığında benzer bir şeye sahiptir, ancak standart C matematik işlevlerine (2 inç veya 2 çift olarak beklenir) değerlerin aktarılmaya hazır hale getirilmesi için gerçekten daha fazla değer vardır ve tümünü atlar. İntegral türleri. Nesnelerinizin nasıl dönüştürüldüğünü tam olarak kontrol etmeyi tercih eden bir şey mi?
TL; DR: Promosyonun kendisini yapan makinelerin ötesinde aritmetik bir tanıtım başlığında ne tür yardım şablonlarını bulmayı bekliyorsunuz?
Ben de herhalde çok sen (farklı türden) bazı değişkene güzel terfi sonucu atamak için gidiyoruz sona yüzden bunun için çok pratik bir kullanım göremiyorum. Belki de C++ 0x ile ** auto **, ama sonra da ** decltype ** işin çoğunu daha kolay halledebileceğini düşünüyorum. – UncleBens
Görünüşe göre, bu, C++ 0x'da CommonType yapısı olarak uygulanacak ve doğru türün belirlenmesi için decltype'dan faydalanılacak. Birisi, standardın promosyon/dönüşüm hakkındaki kurallarına göre tamamen düzgün bir davranış isterse, sadece şablonların değişmeli varyasyonlarını yazmaları gerekir. – BenTrofatter