c++ - 通过模板特化实现条件函数调用
问题描述
我正在尝试对遗留代码进行依赖注入,因为性能很重要,因此无法应用动态多态性。以下是我目前的想法,无法编译。
// myclass.h
class MyClass {
public:
MyClass(GlobalsImpl *globals) { globalsImpl = globals; }
MyClass(GlobalsTest *globals) { globalsTest = globals; }
std::string test();
private:
template<bool> auto getGlobals();
private:
bool isImpl;
GlobalsImpl *globalsImpl;
GlobalsTest *globalsTest;
};
// myclass.cc
template<bool> auto MyClass::getGlobals() { return getGlobals<> }
template<> Impl * MyClass::getGlobals<true>() { return globalsImpl; }
template<> Test * MyClass::getGlobals<false>() { return globalsTest; }
std::string MyClass::test() { return ""; }
我的直觉是实现 if test 调用,然后 return globalsTest; 否则返回 globalsImpl。globalsImpl 是真正的实现,而 globalsTest 是我的注入。我怎样才能做到这一点?
解决方案
推荐阅读
- javascript - 将格式为 Sat Dec 30 1899 HH:MM:SS 的 JavaScript 时间戳转换为今天?
- windows-10 - AutoHotKey - 三指拖动脚本导致小问题,如何解决?
- javascript - 如何在包含对象的反应js中映射数组?
- java - 尝试从响应正文上的关闭流中读取
- python - 我怎么知道列表中有哪些元素?
- microsoft-graph-api - Teams Bot SDK 无法使用频道对话更新参考获取团队信息
- bash - 带有保留字符的 Bash 插值问题
- android - 如何在可通过 App Wrapping 配置的 Xamarin Android 应用中创建设置
- python - Pyodbc + SQLA - 通信链路故障
- angular - 如何将 Firebase 查询快照转换为对象数组