static si está en plano C ++?
Problema en resumen:
¿Cómo podría uno implementarstatic if
funcionalidad, propuesta en c ++ 11, en simple c ++?
Historia y problema original:
Recientemente se me ocurrió un problema como este. Necesito una claseSender
con una interfaz como
class Sender
{
void sendMessage( ... );
void sendRequest( ... );
void sendFile( ... );
// lots of different send methods, not important actually
}
En algunos casos necesitaré crear una DoubleSender, es decir, una instancia de esta clase, que llamaría a sus métodos dos veces, es decir, al llamar, digamos, unsendMessage(...)
método, el mismo mensaje debe enviarse dos veces.
Mis soluciones:
Primer enfoque
Tienen unaisDouble
member, y al final de cada llamada al método, marque
sendMessage(...) { ... if( isDouble ) { sendMessage( ... ); }
Bueno, no quiero esto, porque en realidad necesitaré una doble publicación muy recientemente, y esta parte del código en la sección de tiempo crítico será 98% pasiva.
Segundo enfoque:
Heredar una claseDoubleSender
desdeSender
e implementa sus métodos como:
void DoubleSender::sendMessage( ... )
{
Sender::sendMessage(...);
Sender::sendMessage(...);
}
Bueno, esto es aceptable, pero ocupa mucho espacio de código desagradable (realmente, porque hay muchas @ diferentsend..
métodos
Tercer enfoque:
Imagina que estoy usando c ++ 11 :). Entonces puedo hacer que esta clase sea genérica y producir la parte necesaria del código de acuerdo con el argumento tempalte usandostatic if
:
enum SenderType { Single, Double };
template<SenderType T>
class Sender
{
void sendMessage(...)
{
// do stuff
static if ( T == Single )
{
sendMessage(...);
}
}
};
Esto es más corto, más fácil de leer que las soluciones anteriores, no genera código adicional y ... es c ++ 11, que desafortunadamente no puedo usar en mi trabajo.
Entonces, aquí es donde llegué a mi pregunta: ¿cómo puedo implementarstatic if
analógico en c ++?
Además, agradecería cualquier otra sugerencia sobre cómo resolver mi problema original.
Gracias por adelantado