我正在尝试构造一个使用不同参数模板化的类的元组,如下所示,但不知道如何实现。
template<class T>
struct A
{
A(T d) : m_t(d) {}
private:
double m_t;
};
template<class... Ts>
struct B
{
std::tuple<A<Ts>...> m_tuple;
template<class... Args>
B(Args&&... args)
{
// How can I do:
// N = number of Args
// m_tuple = {A<Args[0]>(args[0]), A<Args[1]>(args[1]), ..., A<Args[N]>(args[N])};
}
};
您可以使用包扩展,如下所示。另请注意,我们使用 memberinitializer list 来进行
m_tuple
的初始化,而不是在 ctor 体内进行赋值:
这里我们使用
std::forward
:
template<class... Args>
B(Args&&... args): m_tuple(std::forward<Args>(args)...)
{
}