在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
先说一下background 方式1: 所有数据库的操作也只有该大文件一个入口; 缺点是每个函数中大量重复逻辑不好抽离,感觉有点Low。 方式2: 一旦觉得有重复逻辑,抽象就会自然而然萌生。简单粗暴,重复逻辑抽离为单独函数,这只是封装的思想,不过确实也能解决一些问题,只是对该场景感觉用处不大。 再有就是抽离接口,抽象基类,找到共通点,这应该是大多数的想法,也是我写程序经常思考的方式。但是又有问题,这些函数签名都不同(model struct不同),override没有意义,简单的继承根本解决不了问题。 方式3: 模板,这确实是一种抽象能力,往往要求更高(我是不太会用模板),大量的开源项目几乎都是模板,似乎扯远了。。。。 不同的model structk可以用模板来抽象,但是对应的处理逻辑又是不同的(突然想到了什么,咦,这不是虚函数干的事吗),又回到了方式2的问题 方式2 & 方式3: 模板继承,base中转化为特定的子类,于是有了下面的代码 template<typename TableType, typename RowType> class SqliteTable { } template<typename TableType, typename RowType> template<typename KeywordType> bool SqliteTable<TableType, RowType>::execDeleteRowByKeyword(CppSQLite3DB* sqliteDB, const std::string& columnName, const KeywordType& keyword) { // convert base to child spefic instance return static_cast<TableType*> (this)->execDeleteRowByKeyword<KeywordType>(sqliteDB, columnName, keyword); } 主要其实就是在父类中直接转化为子类的对象,在编译期就实现了多态,不同于虚函数的运行期 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论