Mar*_*zog 4 c++ initialization c++11
假设我有一个类,它接受类型T的参数和U构造函数中类型的参数集合.以下解决方案有效:
struct Q
{
Q(T t, std::initializer_list<U> us);
};
Run Code Online (Sandbox Code Playgroud)
然后创建此类的实例将是:
Q q {t1, {u1, u2, u3, u4} };
但这对我来说看起来有点不洁净.有没有比这个更好的解决方案?
小智 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};
}
Run Code Online (Sandbox Code Playgroud)
它仍然是类型安全的 - 只U允许类型的结构.
| 归档时间: |
|
| 查看次数: |
410 次 |
| 最近记录: |