消除C ++模板的重复

时间:2013-06-10 01:33:16

标签: c++ templates dry

#include "ArrayList.h"

template <typename T>
ArrayList<T>::ArrayList(): innerArray(new T[0]), len(0) {
    // constructor stuff
}
template <typename T>
ArrayList<T>::~ArrayList() {
    // destructor stuff
}
... on and on and on ...

在此代码中,我必须在整个班级的每个成员函数之前编写template <typename T>ArrayList<T>::

有没有办法消除这种重复(DRY),所以我可以做类似的事情

#include "ArrayList.h"
// do some magic

ArrayList(): innerArray(new T[0]), len(0) {
    // constructor stuff
}
~ArrayList() {
    // destructor stuff
}

1 个答案:

答案 0 :(得分:0)

我想你可以使用宏:

#define DEFINE_ARRAYLIST_TEMPLATE(F, ...) template <typename T> \
                                          A<T>::F(__VA_ARGS__)

用它来做到这一点:

DEFINE_ARRAYLIST_TEMPLATE(ArrayList) : innerArray(nullptr), len(0)
//                                                ^^^^^^^ < my earlier suggestion
{}

DEFINE_ARRAYLIST_TEMPLATE(ArrayList, int n) : innerArray(new T[n]), len(n)
{}

DEFINE_ARRAYLIST_TEMPLATE(~ARRAYLIST)
{}