单独的cpp文件中的模板类泛型特化:许多模板参数

时间:2017-03-23 11:30:25

标签: c++ c++11 templates

假设在.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)来避免这种情况吗?早期我看到一个预处理器宏来做这个,但我觉得它很丑陋:))

1 个答案:

答案 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() {

    }