簡體   English   中英

無法移動std :: any

[英]Cannot move std::any

以下代碼

using vptr = std::vector<std::unique_ptr<int>>;
auto m = std::unordered_map<int, std::any>{};
m.try_emplace(0, move(vptr{}));

無法編譯,抱怨使用了unique_ptr的已刪除副本構造函數。 在模板參數中用vptr替換std::any ,此代碼將編譯,因此, any

如何強制std::any移動而不是復制?

問題不是移動std :: any,而是std :: any本身不支持僅移動類型(例如std :: unique_ptr)

按照cppreference

template< class ValueType >
any( ValueType&& value );

std::forward< ValueType>(value)直接初始化的初始內容為std::decay_t< ValueType>類型的對象構造一個對象。 如果std::is_copy_constructible< std::decay_t< ValueType>>::valuefalse ,則程序std::is_copy_constructible< std::decay_t< ValueType>>::value false

您可以使用static_assert檢查is_copy_constructible ...是否為false,請參閱coliru

我能想到的最簡單的解決方法是改用shared_ptr並仍然調用std :: move。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM