2012-07-31 28 views
6

Como estoy implementando clases de plantillas para pequeños vectores matemáticos, encuentro un problema. Para las operaciones aritméticas, el tipo de retorno de T1 lhs + T2 rhs es std::common_type<T1, T2>::type. Pero, ¿cuál es el tipo de devolución para lo siguiente (por ejemplo T1 firmado y T2 sin firmar o lo contrario, o T1 char y T2 unsigned long long int etc ...):Tipo de devolución de operadores bit a bit en C++

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

Muchas gracias.

+0

'decltype (lhs & rhs)', etc.? –

+3

¿Conoce las trampas inherentes a la realización de funciones bit a bit en valores firmados? –

+0

¿Desea obtenerlo programáticamente o quiere saberlo? En el caso posterior, declare (pero no defina) una función de plantilla con un único argumento y llámela con las expresiones. El compilador le dirá los tipos en el mensaje de error –

Respuesta

4

Supongo que va a implementar operaciones de bitwise en vectores en forma compoment-wise. Las operaciones esencialmente a nivel de bit son operaciones enteras y no veo ninguna razón para no hacer que su resultado sea std::common_type<T1, T2>::type.

El resultado de los cambios no depende del operando correcto. Solo usa T1 para eso.

+0

Porque el resultado de los cambios no depende del lado derecho. –

+0

@R. Martinho Fernandes: He actualizado mi respuesta. –

Cuestiones relacionadas