C++ 模板宏快捷方式

标签 c++ templates macros

通常在使用模板时,您最终会得到类似这样的东西:

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;

所以我的类(class)就变成了:

#include "template_types.h"

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

这看起来更干净,并且在我制作其他模板类时避免了重复。这是一件好事吗?还是我应该避免这种情况而只是复制粘贴 typedef?

最佳答案

当然,您正在做的事情会奏效,但有点过时了。您是否尝试过将这些内容放入您可以从中派生的另一个模板类中?

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++ 模板宏快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1533917/

相关文章:

c++ - decltype 在不生成代码的模板方法上抛出错误

c++ - 如何判断 Visual Studio 2012 中的 C++ 动态库是托管的还是非托管的?

c++ - 为什么不能推导出这个metametafunction的模板参数呢?

c++ - SHFileOperation FO_MOVE 在目标驱动器已满时删除文件

c++ - 对于类模板,std::enable_if 相对于 static_assert 的优势是什么?

c - 为什么在枚举中#define 相同的项目?

c++ - GCC:如何找到不丢弃目标文件的原因

c++ - 我应该如何编写一个像 MPL 中那样工作的元函数?

excel - 确定具有多个 ID 和频率列的数字 ID 的总频率

c++ - C++ 模板只是变相的宏吗?