简而言之问题:
怎样才能实现static if
在 c++11 中提出的功能,用普通的 c++ ?
历史和原始问题:
最近我遇到了这样一个问题。我需要上课Sender
具有类似的界面
class Sender
{
void sendMessage( ... );
void sendRequest( ... );
void sendFile( ... );
// lots of different send methods, not important actually
}
在某些情况下,我需要创建一个双发器,即此类的实例,它将调用其方法两次,即当调用时,比方说,sendMessage(...)
方法中,同一条消息必须发送两次。
我的解决方案:
第一种方法:
有一个isDouble
成员,并在每个方法调用结束时进行检查
sendMessage(...) { ... if( isDouble ) { sendMessage( ... ); }
好吧,我不想要这个,因为实际上我最近需要双重发布,并且时间关键部分的这部分代码将是 98% 被动的。
第二种方法:
继承一个类DoubleSender
from 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
C++ 中的模拟?
另外,我将不胜感激有关如何解决我原来的问题的任何其他建议。
提前致谢。