如何使用折叠表达式实例化可变参数模板函数中的每种类型?

问题描述

我正在尝试创建一个“对象管理器”,该对象将创建并存储模板类的实例。该类采用一个模板参数,并从基类继承,以允许将具有不同模板args的实例存储在同一容器中。用户将在可变参数模板函数中提供将用作模板参数的类型。

下面是一个说明问题的最小示例:

struct A
{
    int m_a = 0;
};

template<typename T>
struct B : public A
{
    int m_b = 1;
    T m_t;
};

template<typename... Types> std::vector<A*> generate_a_vec()
{
    std::vector<A*> a_vec; // <--- Need to initialize with a new B<T> for each T in "Types"
    return a_vec;
}

int main()
{
    std::vector<A*> a_vec = generate_a_vec<int,float,bool>();

    for(A* a : a_vec)
    {
       std::cout << a->m_a << std::endl;
    }

    return 0;
}

假设我们将使用的每个T都有一个默认构造函数。是否可以使用折叠表达式为B<T>中的每种类型使用new创建一个Types的{​​{1}}并将结果的指针添加到generate_a_vec()中的向量?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)