最近專案上遇到這樣的情況,前端發起請求,我這邊需要根據請求中的url判斷呼叫哪個函式方法,由於請求方法時字串,於是乎,一堆if-else就出來了,如下所示:
if(uri==「abc」)
else if(uri=="bcd")
//....
說實話,如果請求的型別少這個if-else結構都還好,不是很多,但是有幾十上百個請求的時候,這個if-else就有點嚇人了。
能不能讓字串和函式對映起來?答案是可以的,存放在乙個map裡面就可以了,下面介紹在qt中的用法
①非類的成員函式
定義:
typedef void (*qfuncpointer)(const qstring&);
qmapfuncpointer;
初始化:
funcpointer.insert("abc",(&onabcreq));
funcpointer.insert("bcd",(*onbcdreq));
使用:
qfuncpointer reffunction=funcpointer["abc"];
if(reffunction)
完整測試**:
void onabcreq(const qstring& message)
return a.exec();}
①類的成員函式
定義:
//在類中定義
typedef void (類名::*qfuncpointer)(const qstring&);
qmapfuncpointer;
初始化:
funcpointer.insert("abc",(&類名::onabcreq));
funcpointer.insert("abc",(&類名::onbcdreq));
呼叫:
qfuncpointer reffunction=funcpointer["abc"];
if(reffunction)
完整測試案例:
public:
//呼叫
void request(qstring& req,qstring& msg);
private:
//成員函式
void onabcreq(const qstring& message);
void onbcdreq(const qstring& message);
};void test::request(qstring& req,qstring& msg)
}void test::onabcreq(const qstring& message)
{ qdebug()<
其中如果類的成員函式是static型別的,需要使用①中的方式新增對映關係。
c 容器 vector map 中使用函式指標
我要動態生成mfc選單,動態繫結響應命令。include stdafx.h include include include string using namespace std 宣告乙個函式指標 int pfunc int int func1 int nin int func2 int nin ty...
QT中使用函式指標
想仿命令列,所以定義了乙個類,讓乙個string 對應乙個 function,將兩者輸入list容器。類中定義了 qstring commandstr void mainwindow commandfun void 乙個qstring 乙個指向mainwindow類成員函式的指標。但是沒想到在類中使...
C 中使用空物件指標呼叫成員函式
c 中,空指標是不能夠使用的,然後空物件指標有時候卻能夠呼叫成員函式。下面定義乙個簡單的類 12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 classtestcls intmain 空指針對test fun1和 test fun2的呼叫正常,對test fun...