类似类型列表 (?) 的模板 class
typelist-like (?) template class
我正在尝试实现以下目标:创建模板 class,它使用其模板参数创建模板类型的实例,并在构造函数等的某处使用它。考虑以下示例:
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
class 的灵活性并且我希望这些 T01、T02 class 的数量不同怎么办?
示例:
bar<foo<int>, foo<int>> b(5);
b.print();
bar<foo<int>, foo<int>>, foo<int>> c(6);
c.print();
也许是使用参数包之类的东西?
EDIT001:
coliru.
的最终工作版本
您正在寻找可变参数模板(自 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;
};
我正在尝试实现以下目标:创建模板 class,它使用其模板参数创建模板类型的实例,并在构造函数等的某处使用它。考虑以下示例:
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
class 的灵活性并且我希望这些 T01、T02 class 的数量不同怎么办?
示例:
bar<foo<int>, foo<int>> b(5);
b.print();
bar<foo<int>, foo<int>>, foo<int>> c(6);
c.print();
也许是使用参数包之类的东西?
EDIT001:
coliru.
您正在寻找可变参数模板(自 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;
};