alın. Şablon parametresi her zaman bir tamsayı türü olacak bir şablon sınıfı tanımlamak istiyorum. Sınıf, T
tipinden biri ve diğeri ise T
türünün imzasız varyantı olarak - yani T == int
ise, o zaman T_Unsigned == unsigned int
. İlk içgüdüm bunu yapmaktı:Bir tamsayı şablonu parametresinin imzalı/imzasız varyantını, açık özellikleri olmayan
Ama işe yaramıyor. Sonra şöyle, kısmi şablon uzmanlık kullanma hakkında düşündüm: Bu işler
template <typename T> struct UnsignedType {}; // deliberately empty
template <> struct UnsignedType<int> {
typedef unsigned int Type;
};
template <typename T> class Range {
typedef UnsignedType<T>::Type T_Unsigned;
/* ... */
};
, çok uzun kısmen her tamsayı türü için UnsignedType
uzmanlaşmak olarak. Biraz daha fazla kopyalama-yapıştırma işi (makroların mantıklı kullanımını kesmek) ama kullanışlı olabilir.
Ancak, şimdi merak ediyorum - bir Tamsayı türünün imzalanmasını ve/veya tür başına işaret türünü manuel olarak tanımlamak zorunda kalmadan, bir türün imzasız varyantını kullanmanın başka bir yolu var mı? Yoksa bunu yapmanın tek yolu bu mu?
+1. :) –