基于模板类型在模板类中启用方法

时间:2012-02-19 07:44:26

标签: c++ boost template-meta-programming

我正在编写一个模板整数包装器类,我想根据类的模板参数类型提供一个assigment运算符:

template<typename IntType>
class secure_int {
public:
  // enable only if boost::is_signed<IntType>
  secure_int &operator=(intmax_t value) {
   // check for truncation during assignment
  }

  // enable only if boost::is_unsigned<IntType>
  secure_int &operator=(uintmax_t value) {
   // check for truncation during assignment
  }
};

因为operator =不是成员模板,所以带有boost :: enable_if_c的SFINAE不起作用。提供此类功能的工作选项有哪些?

2 个答案:

答案 0 :(得分:2)

为什么不使用模板专业化?

template<typename IntT>
struct secure_int {};

template<>
struct secure_int<intmax_t>
{
  secure_int<intmax_t>& operator=(intmax_t value)
  { /* ... */ }
};

template<>
struct secure_int<uintmax_t>
{
  secure_int<uintmax_t>& operator=(uintmax_t value)
  { /* ... */ }
};

答案 1 :(得分:1)

您可以将其设置为成员模板,并在C ++ 11中将参数默认为void。如果您没有支持该功能的编译器,那么专业化是您唯一的选择。