可变参数模板构建模板列表

时间:2014-03-15 21:39:16

标签: c++ templates variadic

在下面的代码中,如何使用列表b来创建object_b,方法与使用列表a手动创建object_a的方式相同?

#include <list>

template <int...Args>
class Object {};

int main() {
    std::list<int> a = {1,2,3,4,5};
    Object<1,2,3,4,5> object_a;
    std::list<int> b;
      // do whatever with b
    // Object< ? > object_b;  // how to use b to create object_b?
}

2 个答案:

答案 0 :(得分:0)

我最好的解决方案:

#include <list>

template <std::list<int>& L>
class Object {};

std::list<int> globalList;

int main() {
    std::list<int> a = {1,2,3,4,5};
    globalList = a;
    Object<globalList> object_a;
}

有更好的想法吗?没有引入全局变量的任何方式?

答案 1 :(得分:0)

您是否要求使用与std :: list相同的语法构造对象?

您可以使用std :: initializer_list来实现此目的。

class Object{

    Object(const std::initialize_list<int>& vars)
    {
          // do stuff with the vars. 
    }
};

然后你可以做

Object my_object = {1, 2, 3, 4};