【发布时间】:2017-03-24 15:29:48
【问题描述】:
假设在 .h 文件中我有一个模板类声明:
template<typename T1,
typename T2,
typename T3,
typename T4>
class A {
public:
A();
~A();
void method1();
void method2();
...
}
模板参数的数量自此 API 起会发生变化 仍然没有修复。我更喜欢在单独的 .cpp 文件中实现通用专业化。据我了解,有人可能会写(例如,对于 ctor):
template<typename T1,
typename T2,
typename T3,
typename T4>
A<T1, T2, T3, T4>::A() {
...
}
对于每个 A 类方法等等……使用笨重的构造让我很恼火:
template<typename T1,
typename T2,
typename T3,
typename T4>
A<T1, T2, T3, T4>::
每次我实现 A 类方法时。增删时 一个或几个模板参数将是一个大问题。 我可以使用一些 C++ 语言功能(最高 C++11)来避免这种情况吗?早期我看到了一个预处理器宏来执行此操作,但我认为它很难看:)
【问题讨论】:
-
I prefer to implement a generic specialization in separated .cpp file- 你的模板的用户还必须看到这个特化才能使模板实例化成为可能,所以除非你准备好在这个 .cpp 中显式实例化 A 的版本,你也可以把.h 文件中的这个实现。 -
可以使用 c++11 中的可变参数模板。检查eli.thegreenplace.net/2014/variadic-templates-in-c