我有一個cpp文件(不是類)中的靜態方法。 我想全局使用它,而不需要將其重新聲明爲extern。 在這種情況下,是否可以使用全局函數指針指向此靜態方法,並且全局使用此函數指針?現有的靜態方法可以使用函數指針進行全局嗎?
1
A
回答
6
它可以做你想做的事情,但是爲什麼你會避免使用extern,當它正是你想通過一個更復雜的(和不可讀的)機制來模擬?
1
C中的靜態聲明告訴編譯器不要添加函數符號表。這意味着如果其他模塊需要,提供者無法鏈接該功能。該函數仍然存在(但對鏈接器不可見),因此如果將函數的地址記錄在指針中,則可以毫無問題地調用該函數。
所以簡短的回答是肯定的,沒關係。
0
是的,在隱藏實現時製作公共指針通常是您可能期望的工廠樣式模式。
知道自己爲什麼說「我想全局使用它而不將其重新聲明爲作爲extern」可能很有趣。
爲什麼要將聲明從static(僅在該模塊中可用)更改爲extern(使其在模塊外部可用並將其發佈)您想要避免的操作?
0
如果它在全局名稱空間中的cpp文件中是靜態的,那麼該函數只能從該cpp文件中直接使用。它是一種私人幫手功能。
你可以做的是在函數原型上做一個typedef,並引入一個公共函數,該函數返回一個函數指針或一個指向不同函數的指針表,這通常是爲了實現插件和有一些回調或API方法註冊。 +要點是你沒有強大的綁定功能。
0
靜態說明符隱含內部鏈接。
您希望使用外部鏈接的靜態,而不需要顯式存儲說明符。如果你的函數在命名空間範圍內,只需刪除'static'說明符。命名空間範圍的默認行爲在外部鏈接時是靜態的。
相關問題
- 1. 可以通過C中的函數指針調用靜態函數嗎?
- 2. 全局靜態指針問題
- 3. 函數可以接受靜態函數指針作爲參數嗎?
- 4. 方法指針的靜態數組
- 5. 通過函數指針使用的函數可以內聯嗎?
- 6. 全局靜態布爾指針使用pthread導致段錯誤
- 7. 在靜態方法中訪問全局類的全局方法
- 8. 無法通過靜態方法調用指向成員函數的指針
- 9. 隱藏實現成員函數(如靜態全局函數)的
- 10. C++調用靜態函數指針
- 11. 正在返回一個指向靜態局部變量安全的指針嗎?
- 12. 將C++實例方法分配給全局函數指針?
- 13. 函數指針的靜態映射
- 14. 使用指向非靜態成員函數的指針實現回調
- 15. 可以隱藏靜態方法嗎?
- 16. javascript中的全局靜態函數
- 17. AS3調用帶出「新」全局函數或者具有靜態方法
- 18. 將全局指針傳遞給函數
- 19. C++類成員指針全局函數
- 20. 函數指向非靜態成員函數的指針?
- 21. 我可以在java的靜態方法中使用非靜態變量嗎?
- 22. 調用synchronized靜態方法,那麼可以訪問其他靜態方法嗎?
- 23. python函數/方法調用有什麼靜態的嗎?
- 24. 可以使用@InitBinder註解的方法標記爲靜態嗎?
- 25. 純函數可以讀取全局狀態嗎?
- 26. 靜態成員函數和全局函數有什麼不同?
- 27. 在java中的靜態方法,我可以以非靜態方式訪問靜態方法嗎?
- 28. 實例中的PHP全局函數中是靜態變量嗎?
- 29. 我們可以把全局靜態變量當作全局變量嗎?
- 30. 進口調用__new__靜態方法嗎?
...或者你可以用一個公共名稱編寫一個額外的函數,它只是簡單地調用靜態函數來完成這項工作,但爲什麼不把原始函數放在第一位呢? – 2011-02-10 21:12:16