статичен ли в простом с ++?
Проблема вкратце:
Как можно реализоватьstatic if
функциональность, предложенная в C ++ 11, в простом C ++?
История и оригинальная проблема:
Недавно у меня возникла такая проблема. Мне нужен классSender
с интерфейсом как
class Sender
{
void sendMessage( ... );
void sendRequest( ... );
void sendFile( ... );
// lots of different send methods, not important actually
}
В некоторых случаях мне нужно будет создатьDoubleSenderто есть экземпляр этого класса, который будет вызывать его методы дважды, то есть при вызове, скажем,sendMessage(...)
Метод, одно и то же сообщение должно быть отправлено дважды.
Мои решения:
Первый подход:
ЕстьisDouble
член, и в конце каждого вызова метода сделать проверку
sendMessage(...) { ... if( isDouble ) { sendMessage( ... ); }
Что ж, я не хочу этого, потому что на самом деле мне понадобится двойная публикация совсем недавно, и эта часть кода в критичной ко времени секции будет на 98% пассивной.
Второй подход:
Наследовать классDoubleSender
изSender
и реализовать его методы, такие как:
void DoubleSender::sendMessage( ... )
{
Sender::sendMessage(...);
Sender::sendMessage(...);
}
Ну, это приемлемо, но занимает много места неприятного кода (действительно, потому что есть много разныхsend..
методы.
Третий подход:
Представьте, что я использую C ++ 11 :). Затем я могу сделать этот класс универсальным и создать необходимую часть кода в соответствии с аргументом tempalte, используяstatic if
:
enum SenderType { Single, Double };
template<SenderType T>
class Sender
{
void sendMessage(...)
{
// do stuff
static if ( T == Single )
{
sendMessage(...);
}
}
};
Это короче, легче читать, чем предыдущие решения, не генерирует дополнительный код и ... это c ++ 11, который я, к сожалению, не могу использовать в своей работе.
Итак, вот где я пришел к моему вопросу - как я могу реализоватьstatic if
аналог в с ++?
Кроме того, я был бы признателен за любые другие предложения о том, как решить мою первоначальную проблему.
Заранее спасибо.