以下程式碼可能需要一定的c/c++基礎。
需要一些函數指標的知識
深度剖析函數指標點這裡
common.h
#pragma once typedef int (*pt)(void); void init_2();
#include <iostream> #include "common.h" using namespace std; static pt next_pt; extern pt top_pt; int filter_2() { cout<<"filter_2"<<endl; if(next_pt) next_pt(); } static void filter_2_init() { next_pt = top_pt; top_pt = filter_2; } void init_2() { filter_2_init(); }
#include <iostream> #include "common.h" using namespace std; static pt next_pt; pt top_pt; static int filter_1() { cout<<"filter_1"<<endl; if(next_pt) next_pt(); } static void filter_init() { next_pt = top_pt; top_pt = filter_1; } void init_1() { filter_init(); } int main() { init_1(); init_2(); top_pt(); return 0; }
g++ 1.cpp 2.cpp -g -O0
執行
./a.out
filter_2
filter_1
如果你已經編程並執行成功,請繼續看.
以上就介紹了類似 nginx 編譯時產生函數鍊錶,包含了面向的內容,希望對PHP教學有興趣的朋友有幫助。