【发布时间】:2015-09-07 18:23:53
【问题描述】:
很确定我已经知道这个问题的答案,但值得一试。
所以,假设我有一个类型列表:
template <typename ...Ts>
struct typelist{};
其中包含一些对象:
struct foo{};
struct bar{};
struct quux{};
using objects = typelist<foo, bar, quux>;
现在我有一个模板类 (baz) 可以接受任何这些对象。但是,由于代码库大小和编译时间的原因,我希望在 cpp 文件中实现我的模板化方法。
所以在 baz.cpp 的底部我有:
template <> class baz<foo>;
template <> class baz<bar>;
template <> class baz<quux>;
问题是我有很多像baz 这样的类,它们使用的对象列表也在不断变化。那么......无论如何我可以保留我的单一对象类型列表并在每个baz-like 对象的 cpp 文件中使用它来进行专业化吗?然后,我所要做的就是在我有一个新对象时更新我的类型列表,并且所有对象文件都将重建。
【问题讨论】:
-
您不必专门化,只需明确实例化它们。
-
这绝对可以使用宏来完成。鉴于这将与您的其他代码库隔离,为什么不这样做呢?
标签: c++ templates metaprogramming template-specialization