gpt4 book ai didi

c++ - 为什么不能在 C++ 中创建一个包含一个元组和一个 unique_ptr 作为值的元组?

转载 作者:行者123 更新时间:2023-12-03 10:05:08 58 4
gpt4 key购买 nike

放一个 std::unique_ptrstd::tuple 内工作没有任何问题,但是当 tuple包含另一个 tuple连同 unique_ptr作为元素,则编译器会抛出错误。
例子:

    std::tuple<int, std::unique_ptr<Entity>> tupleA {1, std::move(new Entity)};

//this line throws an error!
std::tuple<std::tuple<int, int>, std::unique_ptr<Entity>> tupleB {{1, 1}, std::move(new Entity)};

第二行,创建 `tupleB` 抛出以下错误:
        error: no matching constructor for initialization of ´std::tuple<std::tuple<int, int>,std::unique_ptr<Entity>>´
note: candidate constructor template not viable: cannot convert initializer list argument to ´std::allocator_arg_t´
这里的问题究竟是什么?

最佳答案

TL;博士
更改您的代码,使其读取

std::tuple<std::tuple<int, int>, std::unique_ptr<Derived>> tupleB{std::make_tuple(1,1), std::move(new Derived)};
详情
您的编译器会告诉您哪里出了问题。它说(在这种情况下是 MSVC)

error C2440: 'initializing': cannot convert from 'initializer list' to 'std::tuplestd::tuple<int,int,std::unique_ptr<Derived,std::default_delete>>'


所以不要像这样使用初始化列表
std::tuple<std::tuple<int, int>, std::unique_ptr<Derived>> tupleB{std::make_tuple(1,1), std::move(new Derived)};
问题如下:
当容器用大括号内的值初始化时,如 { 1, 1},这被推导出为类型 std::initializer_lists<const char *> .反过来,编译器会寻找一个容器构造函数,它接受一个初始化列表作为参数。

关于c++ - 为什么不能在 C++ 中创建一个包含一个元组和一个 unique_ptr 作为值的元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65937785/

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com