在C ++ 11中模拟内联变量

时间:2017-03-04 13:45:38

标签: c++ c++11 static-initialization

在仅限标头的库中,我需要在使用任何库功能之前运行一些初始化代码。目前,我有一个明确的init()功能,用户需要明确调用。

我想避免强迫用户记住调用这样的函数。部分解决方案是将init逻辑嵌入到对象构造函数中,然后将此类对象的实例作为静态成员存储在类模板中:

struct initializer {
    initializer()
    {
        // init() logic here.
    }
};

template <typename = void>
struct holder {
    static initializer s_init;
};

template <typename T>
initializer holder<T>::s_init;

这种解决方案的问题在于,为了在运行时实际构造s_init成员,需要实例化holder类模板。

我的问题是:是否足以定义inline函数以触发holder对象的实例化?即,像

inline void trigger_instantiation()
{
    auto init = holder<>::s_init;
}

要包含在库的所有标题中吗?

0 个答案:

没有答案