通過結(jié)合函數(shù)設(shè)計模式和函數(shù)指針,我們可以創(chuàng)建靈活、可重用、可擴(kuò)展的代碼。函數(shù)設(shè)計模式提供了組織函數(shù)的結(jié)構(gòu)化方式,而函數(shù)指針允許在運行時將函數(shù)作為參數(shù)傳遞。常見模式包括:1. 回調(diào)函數(shù):回調(diào)函數(shù)可以定制另一個函數(shù)執(zhí)行后的行為;2. 策略模式:使用函數(shù)指針實現(xiàn)不同的算法或策略,提高代碼的可擴(kuò)展性。
C++ 函數(shù)設(shè)計模式與函數(shù)指針的結(jié)合
函數(shù)設(shè)計模式提供了一種結(jié)構(gòu)化方式來組織函數(shù),使其更易于管理和維護(hù)。函數(shù)指針則允許我們在運行時將函數(shù)作為參數(shù)傳遞,從而實現(xiàn)更加靈活的代碼。
我們可以將兩者結(jié)合起來,創(chuàng)建可重用且可擴(kuò)展的函數(shù)設(shè)計。下面是兩種常見模式:
1. 回調(diào)函數(shù)
回調(diào)函數(shù)是一種函數(shù)指針,它被作為參數(shù)傳遞給另一個函數(shù),并在該函數(shù)執(zhí)行完成后被調(diào)用。這種模式允許我們根據(jù)需要定制回調(diào)函數(shù)的行為。
實戰(zhàn)案例:
#include <iostream>
#include <vector>
using namespace std;
// 回調(diào)函數(shù)
void print_element(int element) {
cout << element << " ";
}
// 使用回調(diào)函數(shù)的函數(shù)
void for_each(vector<int>& vec, void (*callback)(int)) {
for (int element : vec) {
callback(element);
}
}
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
for_each(vec, print_element); // 打印每個元素
return 0;
}
登錄后復(fù)制
2. 策略模式
策略模式使用函數(shù)指針來實現(xiàn)不同算法或策略。它允許我們動態(tài)切換算法,從而提高代碼的可擴(kuò)展性。
實戰(zhàn)案例:
#include <iostream>
#include <vector>
using namespace std;
// 策略接口
class Strategy {
public:
virtual int calculate(int n) = 0;
};
// 具體策略實現(xiàn)
class AddStrategy : public Strategy {
public:
int calculate(int n) override {
return n + 1;
}
};
class MultiplyStrategy : public Strategy {
public:
int calculate(int n) override {
return n * 2;
}
};
// 使用策略的上下文對象
class Context {
public:
Context(Strategy* strategy) : strategy_(strategy) {}
int do_something(int n) {
return strategy_->calculate(n);
}
private:
Strategy* strategy_;
};
int main() {
int n = 5;
Context context1(new AddStrategy()); // 使用加法策略
cout << context1.do_something(n) << endl; // 輸出 6
Context context2(new MultiplyStrategy()); // 使用乘法策略
cout << context2.do_something(n) << endl; // 輸出 10
return 0;
}
登錄后復(fù)制
通過將函數(shù)設(shè)計模式與函數(shù)指針相結(jié)合,我們可以創(chuàng)建更加靈活、可重用和可擴(kuò)展的代碼。






