问题:
我想要一个类的推导指南,该类采用可变数量的由可变参数模板构造的对象。
例如
template<typename... Ts>
struct y {
using values_t = std::tuple<Ts...>;
values_t values;
constexpr y(const Ts... values): values( { values... } ) { }
};
我现在想提供一个扣除指南,如果我打电话:
y y { { 1, 2, 3 }, { 'a', 'b', 'c' } };
我将得到一个类型的对象:
y<y<int, int, int>, y<char, char, char>> y { { 1, 2, 3 }, { 'a', 'b', 'c' } };
因此,每次我只提供一个初始化列表作为参数时,它都应该被推导出为一个“ y
”对象。
简单类的示例:
如果我只有一个具有一个模板参数的类,我可以通过以下方式实现:
template<typename T>
struct x {
T value;
constexpr x(const T value): value(value) { }
};
template<typename T>
x(const std::initializer_list<T>) -> x<x<T>>;
//works -> x x { { 1 } };
编辑:
以下内容也应该起作用:
y y { { 1, 'a' } };
//resolves to -> y<y<int, char>> y { { 1, 'a' } };