我试图通过将相同的构造函数参数传递给每个元素来构造一个元组。
出于说明目的,我有 2 个可以采用任意数量的构造函数参数的类:
struct Foo
{
template<typename... Args>
Foo(Args... args)
{
std::cout << "Foo " << (... << args) << '\n';
}
};
struct Bar
{
template<typename... Args>
Bar(Args... args)
{
std::cout << "Bar " << (... << args) << '\n';
}
};
我有一个Storage
包含std::tuple
可变数量对象的类;我想将相同的构造函数参数传递给每个对象。
单论点案例(有效):
与这个问题类似,我已经能够将单个构造函数参数传递给每个对象:
template<typename... Ts>
struct Storage
{
template<typename Arg>
Storage(Arg arg) : storage((sizeof(Ts), arg)...) {} // passes 'arg' to each object
std::tuple<Ts...> storage;
};
这有效,如此处所示(godbolt):
Storage<Foo, Bar> s("hello world");
输出:
Bar hello world Foo hello world
扩展到多个构造函数参数(不起作用):
我需要将可变数量的参数传递给Storage
,但到目前为止我无法弄清楚如何解压缩两个不同的参数包
初步尝试:
template<typename... Args>
Storage(Args... args) : storage((sizeof(Ts), args)...) {}
error: mismatched argument pack lengths while expanding ‘(sizeof (Ts), args)’ | Storage(Args... args) : storage((sizeof(Ts), args)...) {} | ^
template<typename... Args>
Storage(Args... args) : storage((sizeof(Ts), args...)...) {}
error: expected binary operator before ‘)’ token | Storage(Args... args) : storage((sizeof(Ts), args...)...) {} | ^
问题:
是否可以通过传递相同数量的构造函数参数来构造可变元组?
template<typename... Ts>
struct Storage
{
template<typename... Args>
Storage(Args... args) : storage(/* what goes here? */) {}
std::tuple<Ts...> storage;
};