статичен ли в простом с ++?

Проблема вкратце:
Как можно реализовать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 аналог в с ++?
Кроме того, я был бы признателен за любые другие предложения о том, как решить мою первоначальную проблему.
Заранее спасибо.

Ответы на вопрос(4)

Ваш ответ на вопрос