zc: c++的類函式指標 不像 delphi的類函式指標,前者 需要規定死 是哪個類的函式的指標,後者就不需要 很靈活。
測試環境:
win7x64
cn_visual_studio_2010_ultimate_x86_***_532347.iso
qt-opensource-windows-x86-msvc2010_opengl-5.3.2.exe
暫時的約定(20170105)(基於現在的水平狀況)
(1)、所有可能成為函式指標的 類成員函式,去掉 編譯器**優化
(2)、所有 類tclassfuncptr的子類 的call()函式 都去掉 編譯器**優化
(3)、所有可能成為函式指標的 類成員函式,都使用 __stdcall 呼叫約定
(4)、所有 類tclassfuncptr的子類 的call()函式 都使用 __stdcall 呼叫約定
1、測試** --> vs2010控制台程式:
1.1、main.cpp
#include #include#include
"zz.h
"class
tclassfuncptr
protected
:
void* fpobj; //
zc: 物件指標
void* fpfunc; //
zc: 類函式的 函式位址(統一使用stdcall呼叫約定,函式傳參/呼叫的時候 方便一點)
public
:
void set(void *_pobj, void *_pfunc)
bool
isvalid()
};//
zc: 子類 命名規則:「tcfp_返回值型別_各個傳入引數型別()」
class tcfp__ :public
tclassfuncptr}}
};class tcfp_i_if :public
tclassfuncptr}}
};class tcfp_cr_if :public
tclassfuncptr
;
#pragma optimize( "", off )crtn __stdcall tcfp_cr_if::call(
int _i, int
_j) }}
#pragma optimize( "", on )
//zc: 獲取 類函式指標(位址)
templatedst_type pointer_cast(src_type src)
//#pragma optimize( "gs", off )
void
main()
1.2、zz.h
#ifndef zzz#define zzz
//#include
//#include
void z01(int _i, int
_j);
void z02(int _i, int
_j);
void z03(int _i, int
_j);
class
crtn
;class
ca
int __stdcall b(int _i, double
_j)
crtn __stdcall returnobj03(
int _i, int
_j)
//zc: 這個函式的實現,寫在了cpp檔案裡面,並且使用了編譯開關 ==> 它的**沒有被優化
crtn __stdcall returnobj01(int _i, int
_j);
//zc: 函式returnobj02(...) 雖然加了編譯開關,但是看彙編release版 裡面仍然是被優化了...
#pragma optimize( "", off )crtn __stdcall returnobj02(
int _i, int
_j)
#pragma optimize( "", on )};
#endif
//zzz
1.3、zz.cpp
#include "zz.h
"#pragma optimize( "", off )
void z01(int _i, int
_j)}
#pragma optimize( "", on )
void z02(int _i, int
_j)}
void z03(int _i, int
_j)}
#pragma optimize( "", off )crtn __stdcall ca::returnobj01(
int _i, int
_j)#pragma optimize( "", on )
z
類函式指標和普通函式指標
我們都看慣了一般的函式指標,但是關於類的函式指標又是怎樣的呢?它的靜態函式指標和非靜態函式指標是一樣的麼?cpp view plain copy font size 18px include using namespace std typedef int pmax int,int 普通函式指標 in...
類成員函式指標
類成員函式指標 類的成員函式分為兩種,一種是靜態函式,另外一種是非靜態函式。例如 class x display 為靜態函式,getvalue即為非靜態函式。兩種函式在使用的時候是不一樣的。靜態函式可以直接由類名來呼叫,而非靜態函式則必須通過某乙個物件來呼叫,例如 x display x x x.g...
類成員函式指標
類成員函式指標的基本用法 1。宣告 已知簡單的類宣告如下 class screen screen public screen forword int num 1 我們可以這樣宣告乙個指向back成員函式的指標 screen screen back fun int para screen back 其...