[英]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)
template< class ValueType >
any( ValueType&& value );
從
std::forward< ValueType>(value)
直接初始化的初始內容為std::decay_t< ValueType>
類型的對象構造一個對象。 如果std::is_copy_constructible< std::decay_t< ValueType>>::value
為false
,則程序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.