gpt4 book ai didi

c++ - std::any std::unique_ptr 不起作用?

转载 作者:行者123 更新时间:2023-12-03 23:58:32 25 4
gpt4 key购买 nike

请考虑以下 C++20 程序:

#include <any>
#include <memory>

int main() {
std::any a;
std::unique_ptr<int> x = std::make_unique<int>(42);
a.emplace<std::unique_ptr<int>>(std::move(x));
}
我越来越:
test.cc: In function ‘int main()’:
test.cc:7:47: error: no matching function for call to ‘std::any::emplace<std::unique_ptr<int, std::default_delete<int> > >(std::remove_reference<std::unique_ptr<int>&>::type)’
7 | a.emplace<std::unique_ptr<int>>(std::move(x));
| ^
In file included from test.cc:1:
/usr/include/c++/9/any:273:7: note: candidate: ‘template<class _ValueType, class ... _Args> typename std::any::__any_constructible<std::any::_Decay<_ValueType>&, std::any::_Decay<_ValueType>, _Args&& ...>::type std::any::emplace(_Args&& ...)’
273 | emplace(_Args&&... __args)
| ^~~~~~~
/usr/include/c++/9/any:273:7: note: template argument deduction/substitution failed:
/usr/include/c++/9/any: In substitution of ‘template<class _ValueType, class ... _Args> typename std::any::__any_constructible<std::any::_Decay<_ValueType>&, std::any::_Decay<_ValueType>, _Args&& ...>::type std::any::emplace(_Args&& ...) [with _ValueType = std::unique_ptr<int>; _Args = {std::unique_ptr<int, std::default_delete<int> >}]’:
test.cc:7:47: required from here
/usr/include/c++/9/any:273:7: error: no type named ‘type’ in ‘struct std::enable_if<false, std::unique_ptr<int>&>’
/usr/include/c++/9/any:288:7: note: candidate: ‘template<class _ValueType, class _Up, class ... _Args> typename std::any::__any_constructible<std::any::_Decay<_ValueType>&, std::any::_Decay<_ValueType>, std::initializer_list<_Up>, _Args&& ...>::type std::any::emplace(std::initializer_list<_Up>, _Args&& ...)’
288 | emplace(initializer_list<_Up> __il, _Args&&... __args)
| ^~~~~~~
/usr/include/c++/9/any:288:7: note: template argument deduction/substitution failed:
test.cc:7:47: note: ‘std::unique_ptr<int>’ is not derived from ‘std::initializer_list<_Up>’
7 | a.emplace<std::unique_ptr<int>>(std::move(x));
有任何想法吗?

最佳答案

类(class)std::any是可复制的。尽管它的名字,它不能包装“任何”和所有类型。具体来说,它不能包装不可复制的类型。 std::unique_ptr不可复制。 std::unique_ptr不能存储在 std::any .

关于c++ - std::any std::unique_ptr 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66353692/

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