可变模板构造模板列表

Variadic templates construct template list

本文关键字:列表      更新时间:2023-10-16

在下面的代码中,如何使用列表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?
}

您是否要求能够使用与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}; 

我最好的解决方案是:

#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;
}

有更好的主意吗?有没有办法不引入全局变量?