c++函數指針 對象內部的函數指針的使用

函數指針

函數指針在c語言定義就比較方便
舉個例子,如果需要指向一個返回值爲void參數爲int , int的函數,可以如下定義函數指針類型

void sum(int a , int b) {
	//其實啥也不幹,調用了個寂寞
}

//1. 直接定義的時候就給初始化
void (*p)(int , int) = sum;

//2. 使用typedef
typedef void (*pfun)(int , int);
pfun ptr = sum;

指向成員函數的指針

這裏說明一點就是我之前嘗試過如果在對象的類外部應該是不允許使用函數指針去直接調用函數的,會報錯:對象函數只能由member ptr or this調用。

在class外的錯誤使用

//--- example.h裏面
class example {
public:
	example();
	~example();
	void memFunc();
};

// ---- example.cc 
void example::memFunc() {}

// ---- main.cc
int main() {
	example e;
	void (example::*fptr)(void) =  &example::memFunc;
	//錯誤用法
	fptr();
	//正確用法
	auto ptr = bind( &example::memFunc , &e);
}

正確的使用方法

正確的使用方式是將函數與其參數綁定在一起變爲一個適配器之後就有了調用的對象。給成員函數相應的執行對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章