对嵌套类型/ typedef

时间:2015-10-29 15:37:01

标签: c++ templates extern

假设我有一个我想要在外部实例化的类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

由于这也不起作用:此成员是否被视为中的模板,不包括作为模板的成员[...]? (这不是一个完全实例化的模板,它是不同的......?有什么方法可以解决这个问题吗?)

0 个答案:

没有答案