2012-07-31 16 views
6

Küçük matematik vektörleri için templated sınıflar olarak, bir sorunla karşılaşıyorum. Aritmetik işlemler için, T1 lhs + T2 rhs dönüş türü std::common_type<T1, T2>::type. 'dir. Ancak aşağıdakiler için dönüş türü nedir (örneğin T1 imzalı ve T2 imzasız veya tersi veya T1 char ve T2 imzasız uzun uzun int vb ...): C++ bitli işleçlerin dönüş türünü döndürme

T1 lhs & T2 rhs ? 
T1 lhs | T2 rhs ? 
T1 lhs^T2 rhs ? 
T1 lhs << T2 rhs ? 
T1 lhs >> T2 rhs ? 

çok teşekkür ederim.

+0

'decltype (lhs & rhs)', vb? –

+3

İmzalı değerler üzerinde bitsel işlevlerin gerçekleştirilmesinin doğasında var olan tuzaklardan haberdar mısınız? –

+0

Programsal olarak edinmek ister misiniz, yoksa bilmek ister misiniz? Daha sonraki durumda, tek bir argüman ile bir şablon fonksiyonunu ilan edin (ama tanımlamayın) ve ifadeleriyle adlandırın. Derleyici, hata mesajında ​​ –

cevap

4

Vektörler üzerinde bit eşlemeli bitsel işlemleri uygulayacağınızı kabul ediyorum. Aslında bitsel işlemler tamsayı işlemleridir ve neden sonuçlarının std::common_type<T1, T2>::type olarak yapılmamasının bir nedenini göremiyorum.

Vardiyaların sonucu sağ işlenene bağlı değildir. Sadece bunun için T1 kullanın.

+0

Çünkü vardiyaların sonucu sağ tarafa bağlı değildir. –

+0

@R. Martinho Fernandes: Cevabımı güncelledim. –

İlgili konular