c++ - 基于模板参数的C++模板添加/启用构造函数

标签 c++ templates template-specialization

在以下情况下是否可以为模板的某些专业定义专用的构造函数:

template<typename T, size_t D>
class vector {
  T values[D];
public:
  vector();
};

我想根据D参数添加构造函数:
template<typename T>
vector<T, 2>::vector(T t1, T t2) { ... }

template<typename T>
vector<T, 3>::vector(T t1, T t2, T t3) { ... }

template<typename T>
vector<T, 4>::vector(T t1, T t2, T t3, T t4) { ... }

最佳答案

template<bool B>
using EnableIfB = typename std::enable_if<B, int>::type;

template<typename T, size_t D>
class vector {
  T values[D];
public:
  template<size_t D1 = D, EnableIfB<D1 == 2> = 0>
  vector(T t1, T t2) { ... }

  template<size_t D1 = D, EnableIfB<D1 == 3> = 0>
  vector(T t1, T t2, T t3) { ... }

  template<size_t D1 = D, EnableIfB<D1 == 4> = 0>
  vector(T t1, T t2, T t3, T t4) { ... }
};

希望这可以帮助。

关于c++ - 基于模板参数的C++模板添加/启用构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11251917/

相关文章:

c++ - 仅更改一个成员函数的类模板特化

c++ - 不同大小数组的迭代器

c++ - Overloaded operator new 在内部是如何工作的?

javascript - 如何将 Web 组件分离到单个文件并加载它们?

C++:模板实现(代码风格)

c++ - 向标准模板的特化添加新方法(std::vector、std::list...)

c++ - 创建不可变的 CFArray 对象 - Apple 示例不起作用

c++ - pthread_create::无法使用类型为 'void *(*)(void *)' 的右值初始化类型为 'void *' 的参数

templates - Play Framework 2.0 模板条件 - 何时

c++ - 模板类型的模板特化