问题描述
我正在开发键值数据库(https://github.com/nmmmnu/HM4)
我有这样的代码:
enum class Command{
INFO,SAVE,RELOAD,GET,GETX,COUNT,SUM,MIN,MAX
};
template<class PROTOCOL,class DB_ADAPTER,class CONNECTION>
class KeyValueWorkerProcessor{
PROTOCOL &protocol_;
DB_ADAPTER &db_;
CONNECTION &buffer_;
public:
KeyValueWorkerProcessor(PROTOCOL &protocol,DB_ADAPTER &db,CONNECTION &buffer) :
protocol_(protocol),db_(db),buffer_(buffer){}
auto operator()(Command cmd){
switch(cmd){
case Command::INFO : return do_info();
case Command::SAVE : return do_save();
case Command::RELOAD : return do_reload();
case Command::GET : return do_get();
case Command::GETX : return do_getx();
case Command::COUNT : return do_count();
case Command::SUM : return do_sum();
case Command::MIN : return do_min();
case Command::MAX : return do_max();
default : return err_NotImplemented_();
}
}
// I have lots of these:
WorkerStatus do_info();
WorkerStatus do_save();
WorkerStatus do_reload();
WorkerStatus do_get();
WorkerStatus do_getx();
WorkerStatus do_count();
WorkerStatus do_sum();
WorkerStatus do_min();
WorkerStatus do_max();
};
template<class PROTOCOL,class CONNECTION>
auto do_something(PROTOCOL &protocol,CONNECTION &buffer,Command cmd){
using MyKeyValueWorkerProcessor = KeyValueWorkerProcessor<PROTOCOL,DB_ADAPTER,CONNECTION>;
MyKeyValueWorkerProcessor processor{ protocol,db,buffer };
return processor(cmd);
};
为避免创建大量具有相同参数的函数-PROTOCOL
,DB_ADAPTER
和CONNECTION
,我创建了模板化的class KeyValueWorkerProcessor
。
这样可以节省很多样板代码,例如否则我需要做:
template<class PROTOCOL,class CONNECTION>
WorkerStatus do_info(PROTOCOL &protocol,CONNECTION &buffer);
template<class PROTOCOL,class CONNECTION>
WorkerStatus do_save(PROTOCOL &protocol,CONNECTION &buffer);
等
但是现在,我在模板化的class KeyValueWorkerProcessor
中有很多方法,我绝对不喜欢。
有什么好办法可以重构它吗?
我正在使用C ++ 17。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)