簡體   English   中英

如何定義 function 以使用移動語義和復制語義?

[英]How to define a function to work with move semantics and copy semantics?

假設我正在實現一個集合,並且我想向其中添加一個元素,例如。

template <typename T>
class MyCollection
{
    void add(const T& element);
};

現在,由於添加元素通常意味着復制它,出於效率原因,具有以下版本的 add 以及void add(T&& element)是有意義的。 現在的問題是,顯然這兩個函數的代碼完全相同,只是參數類型不同。 我的 C++ 命令目前是有限的,但我想知道是否有一種簡單而慣用的方法來編寫一次add function 而無需重寫兩次?

事實上,這是通過定義一個重載來解決的:

void add(T element) {
    where_it_is_actually_stored.insert(std::move(element));
}

接下來,根據您是添加左值、由移動的左值生成的右值還是臨時 object,編譯器將解析適當的構造函數,以便復制或移動您的值參數。

我認為最通用的解決方案實際上就是這個。 這是標准庫提供的,所以我想這使它“慣用”。

template<typename T>
struct my_collection {
    template<typename... Args>
    void emplace(Args&&... args) {
        // construct the T object directly in its place out of std::forward<Args>(args)...
    }
};

暫無
暫無

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

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