是否有显式实例化深度模板 类 的技巧?

Is there a trick to explicitly instantiate deep template classes?

我有问题;我想在

中显式实例化 class,例如 Datatype
using Layout = some::namespaces::Meat_Layout<Some,Parameters>;
using Datatype = other::namespaces::Meta_Datatype<Layout>;

对于显式实例化,我需要使用详细的类型说明符。其中不允许使用 typedef。因此我不能写:

template class Datatype;

但我必须写:

template class some::namespaces::Meta_Datatype<other::namespaces::Meat_Layout<Some,Parameters>>;

如果那里还剩下任何 typedef,我也必须替换它们,这可能会导致类似:

template class some::namespaces::Meta_Datatype<other::namespaces::Meta_Meat_Layout<Some,Meta_Parameters<int>,int,int>>;

如你所见,这很快变得不清楚。

有什么技巧可以避免解构所有的typedef吗?

如果在使用extern template的时候也能使用技巧就更好了。

您不必解构所有类型定义。那些用作模板参数的可以保留原样:

using Layout = some::namespaces::Meat_Layout<Some,Parameters>;
using Datatype = other::namespaces::Meta_Datatype<Layout>;

template class other::namespaces::Meta_Datatype<Layout>;

实际上,您不需要解构所有的typedef。确实不能将 typedef 用作显式实例化模板,但可以将 typedef 用作模板的参数,如 Evg 先前所说。

正如您已经提到的:

14.7.2 Explicit instantiation [temp.explicit]: If the explicit instantiation is for a class or member class, the elaborated-type-specifier in the declaration shall include a simple-template-id.

但是标准中没有提及对模板参数的任何限制,因此您可以在显式实例化中自由使用任何参数,包括 typedef。