假设在.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)来避免这种情况吗?早期我看到一个预处理器宏来做这个,但我觉得它很丑陋:))
答案 0 :(得分:0)
也许你可以创建一个中间类来保存模板参数。这样的事情。
A.H
模板
class TemplateParams {
使用T1_S = T1;
使用T2_S = T2;
使用T3_S = T3;
使用T4_S = T4;
};
id
A_impl.h
template<typename TemplateParams>
class A_Base {
public:
A_Base();
~A_Base();
void method1();
void method2();
};
template<typename T1,
typename T2,
typename T3,
typename T4>
using A = A_Base<TemplateParams<T1,T2,T3,T4>>;
#include "A_impl.h"
使用方式没有变化
template<typename TemplateParams>
A_Base<TemplateParams>::A_Base() {}
template<typename TemplateParams>
A_Base<TemplateParams>::~A_Base() {}
template<typename TemplateParams>
void A_Base<TemplateParams>::method1() {
}