C ++模板的宏的快捷方式(C++ template macro shortcut)

2019-08-17 11:57发布

经常使用模板的时候,你最终是这样的:

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)
   ...
};

这似乎更清洁,并避免重复,当我做其他的模板类。 这是一件好事吗? 或者我应该避免这种情况,只是复制粘贴的typedef?

Answer 1:

当然,你在做什么工作,但它是那种老派的。 你有没有试图把这些东西到另一个模板类,你可以从派生?

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>
...


文章来源: C++ template macro shortcut