类型列表(?)模板类

时间:2016-01-27 16:31:02

标签: c++ templates metaprogramming

我试图实现以下目的:创建模板类,该模板类使用其模板参数来创建模板类型的实例,并在其中的某处使用它,例如构造函数。请考虑以下示例:

template <typename T>
class foo
{
public:
    explicit foo(const T& data) : m_data(data) {}
    T m_data;
};

template <typename T01, typename T02>
class bar
{
public:
    explicit bar(int data) : m_storage(T01(data), T02(data)) {}
    void print() { boost::fusion::for_each(m_storage, printer()); }

private:
    boost::fusion::vector<T01, T02> m_storage;
};

和用法:

bar<foo<int>, foo<int>> b(5);
    b.print();

但如果我想要bar类的灵活性,我想要这些T01,T02类的数量变化怎么办? 例如:

bar<foo<int>, foo<int>> b(5);
b.print();
bar<foo<int>, foo<int>>, foo<int>> c(6);
c.print();

可能会使用参数包吗?

EDIT001:
coliru上的最终工作版本。

1 个答案:

答案 0 :(得分:4)

您正在寻找可变参数模板(自C ++ 11起可用)

template <typename ... Ts>
class bar
{
public:
    explicit bar(int data) : m_storage(Ts(data)...) {}
    void print() { boost::fusion::for_each(m_storage, printer()); }

private:
    boost::fusion::vector<Ts...> m_storage;
};