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

MFH*_*MFH 1 c++ templates template-specialization

在以下场景中是否可以为模板的某些特化定义专用构造函数:

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

我想添加的构造函数依赖于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) { ... }
Run Code Online (Sandbox Code Playgroud)

Joh*_*itb 8

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) { ... }
};
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.