假设我有一个类,它在构造函数中接受类型T
的参数和类型U
的参数集合。
以下解决方案有效:
struct Q
{
Q(T t, std::initializer_list<U> us);
};
创建此类的实例将是:
Q q {t1, {u1, u2, u3, u4} };
但这对我来说看起来有些不洁净。有没有比这个更好的解决方案?
答案 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
类型的结构。