estatic se estiver em c ++ simple
Problem em suma:
Como alguém poderia implementarstatic if
funcionalidade, proposta em c ++ 11, em c ++ simple
História e problema original:
Recentemente, eu vim com um problema como este. Eu preciso de uma aulaSender
com uma interface como
class Sender
{
void sendMessage( ... );
void sendRequest( ... );
void sendFile( ... );
// lots of different send methods, not important actually
}
Em alguns casos, precisarei criar um DoubleSender, ou seja, uma instância desta classe, que chamaria seus métodos duas vezes, ou seja, ao chamar, digamos, umsendMessage(...)
, a mesma mensagem deve ser enviada duas veze
Minhas soluções:
Primeira abordagem
Tem umisDouble
member e, no final de cada chamada de método, marque
sendMessage(...) { ... if( isDouble ) { sendMessage( ... ); }
Bem, eu não quero isso, porque na verdade vou precisar de postagem dupla muito recentemente, e essa parte do código na seção de tempo crítico será 98% passiv
egunda abordagem:
Herdar uma classeDoubleSender
a partir deSender
e implemente seus métodos como:
void DoubleSender::sendMessage( ... )
{
Sender::sendMessage(...);
Sender::sendMessage(...);
}
Bem, isso é aceitável, mas ocupa muito espaço de código desagradável (realmente, porque existem muitas variáveis diferentessend..
métodos
erceira abordagem:
Imagine que estou usando c ++ 11 :). Então eu posso tornar essa classe genérica e produzir a parte necessária do código de acordo com o argumento tempalte usandostatic if
:
enum SenderType { Single, Double };
template<SenderType T>
class Sender
{
void sendMessage(...)
{
// do stuff
static if ( T == Single )
{
sendMessage(...);
}
}
};
Este é mais curto, mais fácil de ler do que as soluções anteriores, não gera código adicional e ... é c ++ 11, que infelizmente não posso usar no meu trabalh
Então, aqui é onde eu vim à minha pergunta - como posso implementarstatic if
analógico em c ++?
Além disso, gostaria de receber outras sugestões sobre como resolver meu problema origina
Desde já, obrigado