是否可以在C ++中通过非模板函数访问全局模板变量

时间:2016-05-30 13:09:59

标签: c++ templates c++11 c++14

我有模板类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对象

1 个答案:

答案 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的构造函数必须在父类中注册单例。