相关疑难解决方法(0)

用于将 unique_ptr 向量初始化为基本类型的可变参数构造

下面是一个示例程序,其中“Container”类需要通过基类指针存储“Items”列表。从 C++11/14 开始,自然的选择是在我的情况下使用 std::unique_ptr 和可变参数模板。

然而,作为新手,我无法理解如何以编译的方式将可变参数列表转换为 unique_ptr 向量的初始化列表。非常感谢您的帮助,因为到目前为止我在网上找不到任何可以帮助我解决这个问题的东西(尽管可能就在那里!)。

提前致谢:

// Example program
#include <iostream>
#include <string>
#include <memory>
#include <vector>

struct Item
{
};


struct Container
{
    template<typename... Items>
    Container( Items&&... items ) 
    : items_( {std::make_unique<Items>(items)...} ) //<<TODO: How, VC compiler times out with this code!?
    {
    }

    std::vector<std::unique_ptr<Item>> items_;
};

struct A : Item { A(float){}  };
struct B : Item {  };
struct C : B    { C(float){} };
struct D : Item { D(float){} };

int main() …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-functions variadic-templates c++11 c++14

5
推荐指数
1
解决办法
1121
查看次数

将参数包转换为向量

我试图理解 C++ 中的可变参数模板,但我在以下示例中迷失了:想象一个函数foo(T, T, T, T)它采用相同类型 T 的可变参数数量并将它们转换为向量。知道如何实现一个吗?

它应该像这样工作

foo<int>(1,2,3,4) returns std::vector<int> x{1,2,3,4}
foo<double>(0.1,0.2,0.3) returns std::vector<double> x{0.1,0.2,0.3}
Run Code Online (Sandbox Code Playgroud)

c++ c++11 c++14

2
推荐指数
1
解决办法
4665
查看次数