微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

std::any 的 std::unique_ptr 不起作用?

如何解决std::any 的 std::unique_ptr 不起作用?

请考虑以下 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,_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,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));

有什么想法吗?

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?