C++回撥函式精解:基礎使用和高階技巧一網打盡

架构师老卢發表於2024-03-18
C++回撥函式精解:基礎使用和高階技巧一網打盡

概述:C++回撥函式提供了靈活的程式設計方式。基礎使用演示瞭如何定義和呼叫簡單的回撥,而高階使用則展示了返回值非 `void` 的回撥和Lambda表示式的靈活性。這種機制使程式更模組化、可維護。

在C++中,回撥函式可以用於實現基礎和高階的功能。以下是一個包含基礎和高階用法的例子,演示如何定義和使用回撥函式。

基礎使用:

#include <iostream>
#include <functional>

// 定義回撥函式型別
using BasicCallback = std::function<void(int)>;

// 基礎回撥函式
void basicCallbackFunction(int result) {
    std::cout << "基礎回撥函式被呼叫,結果為: " << result << std::endl;
}

// 函式接受基礎回撥函式作為引數
void performBasicOperation(int data, BasicCallback callback) {
    std::cout << "執行基礎操作,資料為: " << data << std::endl;
    
    // 呼叫基礎回撥函式
    callback(data);
}

int main() {
    // 使用基礎回撥函式作為引數呼叫函式
    performBasicOperation(42, basicCallbackFunction);

    return 0;
}

高階使用:

#include <iostream>
#include <functional>

// 定義高階回撥函式型別
using AdvancedCallback = std::function<int(int)>;

// 高階回撥函式
int advancedCallbackFunction(int result) {
    std::cout << "高階回撥函式被呼叫,結果為: " << result << std::endl;
    return result * 2;
}

// 函式接受高階回撥函式作為引數
void performAdvancedOperation(int data, AdvancedCallback callback) {
    std::cout << "執行高階操作,資料為: " << data << std::endl;
    
    // 呼叫高階回撥函式並獲取結果
    int result = callback(data);

    std::cout << "高階操作的結果為: " << result << std::endl;
}

int main() {
    // 使用高階回撥函式作為引數呼叫函式
    performAdvancedOperation(42, advancedCallbackFunction);

    // 使用Lambda表示式作為高階回撥函式
    performAdvancedOperation(99, [](int result) {
        std::cout << "Lambda高階回撥函式被呼叫,結果為: " << result << std::endl;
        return result * 3;
    });

    return 0;
}

在這個例子中,基礎使用演示瞭如何定義和使用一個簡單的回撥函式。而高階使用展示瞭如何定義返回值非 void 的回撥函式,並且使用Lambda表示式作為一種更靈活的回撥方式。在高階例子中,回撥函式不僅被呼叫,還返回了一個結果,進一步擴充套件了回撥的靈活性。

相關文章