假设我有一个我想要在外部实例化的类Module<Setting>
。 (减少编译时间......)
我创建了一个包含Module.cpp
的{{1}},并在标头中添加了template class Module<Setting>;
声明。这很好。
现在我想将这个extern
实例化包装在另一个类中,例如:
Module
这似乎不起作用,即其他编译单元的编译时间不会改变(与根本不使用extern声明相比)。我的问题:为什么会这样?我可以以某种方式使它工作? (我试着阅读标准的相关部分,但我无法弄明白......)
我的问题的理由:
我有大量的设置,人们可能会创建不熟悉这些细节的新设置。如果我只是为 template<template<typename> class M, typename First>
struct TrivialInstantiator {
typedef M<First> type;
};
,Module<Setting1>
等创建一个extern模板声明列表,这不仅乏味,而且当用户忘记在cpp文件中添加模板实例时也会产生错误例如。
因此,我尝试在一个点创建一个设置列表(带Module<Setting2>
),并使用此设置列表一次实例化所有设置。
编辑:这个other question是关于extern如何完全工作的,它不是关于它如何处理嵌套类型或typedef。
更新:我再次阅读§14.7.2.8几次:
用于命名类模板特化的显式实例化 也是同类的明确实例(声明或定义) 每个成员(不包括从基地继承的成员) 作为模板的类和成员)[...]。
我尝试了以下内容:
boost::mpl
由于这也不起作用:此成员是否被视为中的模板,不包括作为模板的成员[...]? (这不是一个完全实例化的模板,它是不同的......?有什么方法可以解决这个问题吗?)