在仅限标头的库中,我需要在使用任何库功能之前运行一些初始化代码。目前,我有一个明确的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;
}
要包含在库的所有标题中吗?