2013-06-10 1 views
0
#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>:: перед каждый функции члена во всем классе.Исключение повторения с C++ шаблоны

Есть ли способ устранить это повторение (DRY), так что я могу сделать что-то вроде

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

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

Вы знаете, что вам нужно сохранить реализацию в заголовке в любом случае, не так ли? Так почему бы не определить их внутри класса? –

+0

Я не думаю, что это повторяется ... – 0x499602D2

+0

@LuchianGrigore Подождите, не реализует ли реализация '.cpp' и определение в заголовке? – Doorknob

ответ

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) 
{} 
+0

@Downvoter Пожалуйста, объясните свой нижний предел, и я буду рад улучшить этот ответ. – 0x499602D2

Смежные вопросы