initializer_list与其他参数结合使用

时间:2014-09-06 09:59:38

标签: c++ c++11 initialization

假设我有一个类,它在构造函数中接受类型T的参数和类型U的参数集合。 以下解决方案有效:

struct Q
{
    Q(T t, std::initializer_list<U> us);
};

创建此类的实例将是:

Q q {t1, {u1, u2, u3, u4} };

但这对我来说看起来有些不洁净。有没有比这个更好的解决方案?

1 个答案:

答案 0 :(得分:8)

您需要的是可变参数模板(c ++ 11功能)。

#include <initializer_list>

struct T {};
struct U {};

class Q {
 public:
  template <class ...ArgTypes>
  Q(T t, ArgTypes... args) : Q(t, {args...}) {}
 private:
  Q(T t, std::initializer_list<U> us) {}
};

int main() {
  T t1;
  U u1, u2, u3, u4;
  Q {t1, u1, u2, u3, u4};
}

它仍然是类型安全的 - 只允许U类型的结构。