是否有显式实例化深度模板 类 的技巧?
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。
我有问题;我想在
中显式实例化 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 asimple-template-id
.
但是标准中没有提及对模板参数的任何限制,因此您可以在显式实例化中自由使用任何参数,包括 typedef。