Ярлык макроса шаблона C ++ - PullRequest
       8

Ярлык макроса шаблона C ++

8 голосов
/ 08 октября 2009

Часто при работе с шаблонами вы получаете что-то вроде:

template <T>
class the_class
{
public:
   // types
   typedef T value_type;
   typedef const value_type const_value_type;

   typedef value_type& reference;
   typedef const_value_type& const_reference;

   typedef value_type* pointer;
   typedef const_value_type* const_pointer;

   ...
};

Однако, это много одного и того же материала, скопированного во множество различных шаблонных классов. Стоит ли создавать что-то вроде:

// template_types.h

#define TEMPLATE_TYPES(T) \
       typedef T value_type; \
       typedef const value_type const_value_type; \
       typedef value_type& reference; \
       typedef const_value_type& const_reference; \
       typedef value_type* pointer; \
       typedef const_value_type* const_pointer;

Так что мой класс просто становится:

#include "template_types.h"

template <typename T>
class the_class
{
public:
   TEMPLATE_TYPES(T)
   ...
};

Это выглядит чище и позволяет избежать дублирования при создании других шаблонных классов. Это хорошо? Или я должен избегать этого и просто копировать-вставлять typedefs?

1 Ответ

15 голосов
/ 08 октября 2009

Конечно, то, что ты делаешь, сработает, но это вроде старой школы. Вы пытались поместить этот материал в другой шаблонный класс, из которого вы могли бы извлечь?

template <typename T>
class template_defs
{
public:
   // types
   typedef T value_type;
   typedef const value_type const_value_type;
   typedef value_type& reference;
   typedef const_value_type& const_reference;
   typedef value_type* pointer;
   typedef const_value_type* const_pointer;
};

template <typename T>
class the_class : public template_defs<T>
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...