我有模板类Application
它应该像singleton一样,我想创建一次,并从其他文件中获取。
//main.cpp
Application<NetworkService, User, Policy> a;
a.run();
//other files
//instead of auto a = Application::getInstance<NetworkService, User, Policy>() I want just
auto a = Application::getInstance()
有可能吗?也许在另一种形式中,我只是不想使用模板规范来访问创建的早期全局Application对象
答案 0 :(得分:0)
添加一个ApplicationBase类,并让Application继承它。将单例访问器放在基类中,并为要调用的所有内容添加虚函数。
这样您将始终与基类进行交互,但您可以使用模板参数在main.cpp中构建它。
class ApplicationBase {
public:
static ApplicationBase* getInstance() {
return m_instance;
}
virtual void foo() = 0;
protected:
static ApplicationBase* m_instance;
}
template<TNetworkService, TUser, TPolicy>
class Application : public ApplicationBase {
public:
Application () {
m_instance = this;
}
virtual void foo() {
// do something
}
}
然后在主外面你可以打电话
auto a = ApplicationBase::getInstance();
a->foo();
Application的构造函数必须在父类中注册单例。