使用元组显式实例化模板

Explicitly instantiate templates using a tuple

要显式实例化 class 模板,我可以执行以下操作:

//.h
template<typename T>
class Foo{};


//.cpp
template class Foo<float>;

这很好,因为 Foo<float> class 现在在许多地方使用时只需实例化一次。是否可以使用预定类型的元组显式实例化 Foo<T>?假设元组是 std::tuple<float, int, bool>,我想用它来实例化 Foo<float>, Foo<int>Foo<bool>

如果您想方便地实例化多个 Foo 模板 类,您可以简单地为此提供一个包装器:

template<typename ...Ts>
class MultiFoo : public Foo<Ts>... {};

然后一次实例化多个模板类:

template class MultiFoo<int, double, bool>;

这将为您实例化 Foo<int>Foo<double>Foo<bool>

这是一个demo

如果您确实有一个元组,那么您可以为此提供一个显式特化:

template<typename ...>
class MultiFoo;

template<typename ...Ts>
class MultiFoo<tuple<Ts...>> : public Foo<Ts>... {};

并实例化多个 Foos:

template class MultiFoo<tuple<int,double, bool>>;

这是一个 demo,我在其中添加了自己的元组,以便输出实际可见。这应该与 std::tuple.

的工作方式完全相同

请注意,如果您想显式实例化模板以便它们在其他翻译单元中可见,您需要为此使用 extern 关键字。例如

extern template class Foo<int>;

extern template class MultiFoo<int, double, bool>;