簡體   English   中英

避免在C ++中使用Lambda復制

[英]Avoiding lambda copies in c++

我需要通過MyClass2將用戶定義的lambda傳遞給MyClass1。 我要確保只有一招,沒有副本。 下面的代碼實現了嗎? 有沒有更好的方法可以做到這一點(例如使用編譯器執行的隱式移動)?

注意:我可以控制MyClass1和MyClass2

#include <functional>

using MyFunction = std::function<int(int)>;

class MyClass1 {
 public:
   MyClass1(const MyFunction& func): mFunc(std::move(func)) {}

 private:
   MyFunction mFunc;
};

class MyClass2 {
 public:
  MyClass1* getClass1(const MyFunction& func) {
    return new MyClass1(func);
  }
};

int main() {
  MyClass2 cl2;

  const auto& f = [] (int i) { return i; };

  MyClass1* cl1 = cl2.getClass1(f);
}

由於您可以更改MyClass1MyClass2 ,因此可以通過右值引用獲取函數,然后move其沿

#include <functional>

using MyFunction = std::function<int(int)>;

class MyClass1 {
 public:
   MyClass1(MyFunction&& func): mFunc(std::move(func)) {}

 private:
   MyFunction mFunc;
};

class MyClass2 {
 public:
  MyClass1* getClass1(MyFunction&& func) {
    return new MyClass1(std::move(func));
  }
};

int main() {
  MyClass2 cl2;
  const auto& f = [] (int i) { return i; };

  MyClass1* cl1 = cl2.getClass1(f);
}

現場例子

暫無
暫無

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

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