那麼,函數名稱只是指向函數起始地址的標籤,所以我們可以用不同的名稱鏈接一個函數嗎?作爲OpenGL API函數中的一個例子,以'gl'開頭,我們可以把它變成'GL'嗎?我有強迫症,這對我來說真的很難。是否可以使用不同的名稱鏈接一個函數
2
A
回答
0
我找到一個更好的解決方案:
#define GLFunction(Function) gl##Function
所以:
#define GLClearDepth GLFunction(ClearDepth)
//...
更愜意看到的。
2
你可以創建任何你想要的名稱函數指針和分配現有的功能對他們說:
char *(*my_strcpy)(char *, const char *) = strcpy;
你也可以使用預處理程序如下,如果你的編譯器支持__VA_ARGS__
:
#define my_function(...) gl_function(__VA_ARGS__)
後者可能更易於使用,因爲您不必知道返回類型或參數的數量和類型。
雖然您可以將上述宏定義爲非函數類型,但將其定義爲函數類型的宏將有助於防止它在您不想要的地方替換。
7
鑑於這是C++ 11,你可以輕鬆地創建一個別名,你用auto關鍵字喜歡的任何功能:
const auto Finish = glFinish;
int main()
{
Finish();
}
使用const
通知不出意外將修改函數指針的編譯器/別名,你可以創建更好的代碼。
但是,沒有內置的自動化方法來「重命名」函數。除了手動維護列表之外,獲得類似結果的一種方法是查找每次OpenGL調用並進行正則表達式搜索的頁面,並替換爲(gl(.+))
至const auto \2 = \1;
之類的模式或類似的內容。
2
您可以使用#define
重命名所有功能(儘管如果您打算與其他人共享您的代碼,我會推薦而不是)。例如
#define GLClear glClear
#define GLDrawArrays glDrawArrays
#define GLFinish glFinish
相關問題
- 1. 是否可以將函數名稱等同於另一個函數名稱?
- 2. 是否可以與SqlMembershipProvider一起使用不同的數據庫名稱
- 3. 是否可以更改與表名不同的BO類名稱?
- 4. 使用名稱,而不是一個匿名函數
- 5. 是否可以使用iframe而不鏈接另一頁
- 6. 是否可以動態定義函數參數的名稱?
- 7. 在數據庫中可以使用同一個名稱嗎?
- 8. 只能使用不同名稱的函數可以使用Web api路由嗎?
- 9. 是否可以更改JavaScript函數的`prototype`屬性的名稱?
- 10. 鏈接是否可以鏈接到csrf?
- 11. 是否可以直接鏈接到JavaScript onclick函數?
- 12. 是否有可能用魚的同名名稱來包裝現有的函數?
- 13. 是否可以創建一個變量名稱數組?
- 14. 我可以讓lex發出一個不同名稱的yylex()函數嗎?
- 15. 是否可以使用luajit ffi的C++名稱空間中的函數?
- 16. 是否可以將單元名稱添加到每個不同單元中的函數的調用中?
- 17. 是否可以使用不帶類的名稱空間
- 18. 是否有可能創建一個可以使用選擇器名稱的jQuery函數?
- 19. 是否可以使用SSRS數據集名稱作爲參數?
- 20. 是否可以鏈接.all()而不是使用Promise.all()?
- 21. 是否可以同時從兩個調用函數調用單個參數的同一個函數?
- 22. 是否可以使用Robospice + Retrofit動態設置一個名稱參數?
- 23. 是否可以將函數鏈接到數組?
- 24. 我可以使用函數作爲函數的名稱嗎?
- 25. 使用jQuery .each()時,是否可以使用非匿名函數?
- 26. 在同一函數中使用不同名稱空間
- 27. 是否可以鏈接不同特徵的方法?
- 28. 是否可以在同一個C/C++程序中使用兩個或多個不同的yylex()函數?
- 29. 我可以有一個函數名稱是一個數組變量?
- 30. 是否可以使用列名稱而不是數字,因爲在傳遞的函數中應用?
你可以自己編寫「GL」函數,並從裏面調用「gl」函數。這樣你就可以使用你喜歡的名字而不會喪失功能或性能。 – nwp
那麼你可以編寫一個名爲你想要它的包裝函數,然後在主體中調用'gl'函數。 – NathanOliver
這是一個可怕的想法。事情有標準化的名字是有原因的。你正在談論做大量毫無意義的額外工作,可能會破壞兼容性,並導致與其他程序員的溝通混亂。生活中很多事情都很難。 –