首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

QtConcurrent::map 使用類成員函數的正確姿勢:靜態成員或 Lambda 捕獲

     編輯:程式設計綜合問答

問題

QtConcurrent::map(vector, &MyClass::spin) 直接傳遞非靜態成員函數指針會編譯報錯,因為缺少 this 指針。

三種解決方案

1. 靜態成員函數(無需對象實例)

class MyClass {
public:
    static void spin(int &value) { value *= 2; }
};

// 調用
QtConcurrent::map(vector, &MyClass::spin);

2. Lambda 捕獲 this(推薦,靈活)

MyClass obj;
QtConcurrent::map(vector, [&obj](int &value) {
    obj.spin(value); // 調用非靜態成員
});

3. std::bind / std::function

MyClass obj;
QtConcurrent::map(vector, std::bind(&MyClass::spin, &obj, std::placeholders::_1));

選擇建議

  • 純計算、無狀態 → 靜態成員函數。
  • 需訪問對象成員變量 → Lambda 捕獲 this 或 &obj。
  • 注意 Lambda 捕獲引用的生命週期,確保對象在併發執行期間存活。

補充:C++17 並行算法

#include <execution>
std::for_each(std::execution::par, vec.begin(), vec.end(),
              [&obj](int &v) { obj.spin(v); });
  1. 上一篇文章:
  2. 下一篇文章:
iOS UILabel sizeThatFits: 正確計算多行文字高度並設定 Frame C 語言實作:計算 n 個隨機整數和為 x 的機率 Android ICS (4.0) 以上自定義 Toast 不顯示:需重新創建 Layout 解決 Java Swing 選單欄切換內容區與 GridLayout 進階應用 用戶充值消費日誌系統設計:數據庫 vs 文件,架構選型全解析 Struts2 `` 與原生 `