我在日常工作中遇到的成员模板函数最常见的有用用法是通过提供一个模板函数而不是执行基本相同的功能的许多函数来降低代码复杂度。
例如,假设您正在一台服务器上工作,该服务器接收半打相关的消息,并将传入的数据保存到数据库中的半打表中。一个简单的实现将实现6个消息处理函数(psudocode):
class MessageProcessor
{
void OnMessage(const char* msg);
void ProcessMessage100(Data100* data);
void ProcessMessage101(Data101* data);
void ProcessMessage102(Data102* data);
void ProcessMessage103(Data103* data);
void ProcessMessage104(Data104* data);
void ProcessMessage105(Data105* data);
};
MessageProcessor::OnMessage(const char* msg)
{
unsigned int * msgType = ((unsigned int*)msg);
switch(*msgType)
{
case 100 :
ProcessMessage100((Data100*),sg);
break;
case 101 :
ProcessMessage101((Data101*),sg);
break;
::
}
}
MessageProcessor::ProcessMessage100(Data100* data)
{
Record100* record = GetRecord100(key);
record->SetValue(xyz);
}
MessageProcessor::ProcessMessage101(Data101* data)
{
Record101* record = GetRecord101(key);
record->SetValue(xyz);
}
: :
这里有一个机会来概括ProcessMessage的()函数,因为它们基本上做同样的事情:
class MessageProcessor
{
OnMessage(const char* msg);
template<class Record, class Data> void Process(Data* data);
};
template<class Record, class Data>
void MessageProcessor::Process<Record,Data>(Data* data)
{
Record* record = GetRecord(key);
record->SetValue(xyz);
}
GetRecord函数也可以进行通用化处理,产生一个代码库,其中有两个函数,以前的版本是12.这改进了代码,因为它更简单,移动部件更少,更易于理解和维护。
格式化您的问题并缩进代码时请格外小心。 – avakar 2010-02-25 18:12:23