使用元组显式实例化模板
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>... {};
并实例化多个 Foo
s:
template class MultiFoo<tuple<int,double, bool>>;
这是一个 demo,我在其中添加了自己的元组,以便输出实际可见。这应该与 std::tuple
.
的工作方式完全相同
请注意,如果您想显式实例化模板以便它们在其他翻译单元中可见,您需要为此使用 extern
关键字。例如
extern template class Foo<int>;
和
extern template class MultiFoo<int, double, bool>;
要显式实例化 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>... {};
并实例化多个 Foo
s:
template class MultiFoo<tuple<int,double, bool>>;
这是一个 demo,我在其中添加了自己的元组,以便输出实际可见。这应该与 std::tuple
.
请注意,如果您想显式实例化模板以便它们在其他翻译单元中可见,您需要为此使用 extern
关键字。例如
extern template class Foo<int>;
和
extern template class MultiFoo<int, double, bool>;