c++ - initializer_list 结合其他参数

标签 c++ c++11 initialization

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

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

创建此类的实例将是:

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

但这对我来说看起来有点不干净。有比这个更好的解决方案吗?

最佳答案

您需要的是可变参数模板(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 的结构。

关于c++ - initializer_list 结合其他参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25721869/

相关文章:

c++ - 对函数参数的要求是否也适用于初始化列表?

C# 的默认关键字在 C++ 中是否等效?

c++ - 嵌套类构造函数中的父模板参数推导

c++ - "iterator cannot be defined in the current scope"错误

c++ - VI中的开放声明功能

c++ - Emscripten链接静态库错误: wasm streaming compile fail: Import 'env.getTempRet0'

c++ - 如何测试是否存在模板函数特化

c++ - 提高 += 运算符性能

angular - 从 angular 7 配置中注入(inject) API_BASE_URL

具有显式构造函数的不可复制类型的 C++11 数组初始化