通过将相同数量的构造函数参数传递给每个元素来构造一个元组
Construct a tuple by passing a the same variable number of constructor arguments to each element
我试图通过将相同的构造函数参数传递给每个元素来构造一个元组。
为了便于说明,我有 2 个 classes,它们可以接受任意数量的构造函数参数:
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
class,其中包含 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;
};
它将是:
template <typename... Args>
Storage(Args... args) : storage(Ts(args...)...) {}
我试图通过将相同的构造函数参数传递给每个元素来构造一个元组。
为了便于说明,我有 2 个 classes,它们可以接受任意数量的构造函数参数:
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
class,其中包含 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;
};
它将是:
template <typename... Args>
Storage(Args... args) : storage(Ts(args...)...) {}