简而言之,问题是:
如何static if
用纯 c++ 实现 c++11 中提出的功能?
历史和原始问题:
最近我想出了一个这样的问题。我需要一个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
在 c++ 中实现模拟?
另外,我将不胜感激有关如何解决我原来的问题的任何其他建议。
提前致谢。