IT评测·应用市场-qidao123.com技术社区

标题: 函数指针的用法 [打印本页]

作者: 王國慶    时间: 2025-1-7 13:27
标题: 函数指针的用法
函數指標一些相關的用法和注意事項。以下將詳細說明:
1. 根本寫法:
這是最常見且明確的寫法,尤其在處理重載函數時非常有效。
  1. void (GirlFriend::*girl2)(QString) = &GirlFriend::hungry;
复制代码

2. 使用 typedef 或 using 進行簡化:
當需要多次使用同一種函數指標型別時,可以使用 typedef (C風格) 或 using (C++11引入) 來定義別名,使程式碼更簡潔易懂。
  1. // 使用 typedef
  2. typedef void (GirlFriend::*GirlFriendHungryFunc)(QString);
  3. GirlFriendHungryFunc girl2 = &GirlFriend::hungry;
  4. // 使用 using (更推薦)
  5. using GirlFriendHungryFunc = void (GirlFriend::*)(QString);
  6. GirlFriendHungryFunc girl2 = &GirlFriend::hungry;
复制代码
3. 使用 auto (C++11引入):
在某些情況下,如果編譯器可以推斷出函數指標的型別,可以使用 auto 關鍵字來簡化宣告。但對於類別成員函數指標,通常還是建議明確寫出型別,以增长程式碼的可讀性。
  1. auto girl2 = &GirlFriend::hungry; // 注意:此處 girl2 的型別仍然是 void (GirlFriend::*)(QString)
复制代码
4. 指向靜態成員函數的指標:
指向靜態成員函數的指標與指向一样寻常函數的指標類似,不需要指定類別名稱。
  1. class MyClass {
  2. public:
  3.     static void myStaticFunction(int x);
  4. };
  5. void (*staticFuncPtr)(int) = &MyClass::myStaticFunction; // 注意:沒有 MyClass::*
复制代码
5. 作為函數參數的函數指標:
函數指標可以作為函數的參數,允許將差别的函數傳遞給同一個函數。這在實現回調函數或计谋模式時非常有效。
  1. void executeFunction(void (*funcPtr)(int), int value) {
  2.     funcPtr(value);
  3. }
  4. void myFunction(int x) {
  5.     // ...
  6. }
  7. executeFunction(myFunction, 10);
复制代码
6. 注意事項:

總結:
雖然新的 Qt 連接語法 (connect(sender, &Sender::signal, receiver, &Receiver::slot);) 大部分情況下都取代了手動使用函數指標的需求,但在處理重載訊號/槽,或是需要更底層的控制時,函數指標仍旧非常有效。明白函數指標的差别寫法和用法,能讓你更靈活地運用 C++ 和 Qt。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4