Q
函數指針作爲模板
4
A
回答
5
如果你的意思是創建該功能的類型,你可以做這樣的事情:
template<typename T>
struct Function {
typedef T (*Ptr)(T);
};
然後使用它像
int blah(Function<int>::Ptr a) { }
8
我假設你正在努力申報一個類型(你不能聲明一個沒有具體類型的「模板變量」)。
C++ 03沒有模板的typedef,你需要使用一個結構作爲一種解決方法:
template <typename T>
struct FuncPtr {
typedef T (*Type)(T a);
};
...
// Use template directly
FuncPtr<int>::Type intf;
// Hide behind a typedef
typedef FuncPtr<double>::Type DoubleFn;
DoubleFn doublef;
C++模板11別名將消除結構的解決方法,但除了Clang目前沒有編譯器實際執行這個。
template <typename T>
typedef T (*FuncPtr)(T a);
// Use template directly
FuncPtr<int> intf;
// Hide behind a typedef
typedef FuncPtr<double> DoubleFn;
DoubleFn doublef;
+0
只需更新這個舊條目即可提及自GCC 4.7起,GCC現在支持模板別名。 –
0
你不能那樣做。您只能創建具體類型的函數指針。
0
這是對的Visual Studio 2015年確定並在GCC你應該使用命令行選項-std=c++11
template<class T> using fpMember = void (T::*)();
相關問題
- 1. 函數指針作爲模板參數?
- 2. 模板函數指針作爲模板參數
- 3. 模板函數指針
- 4. 模板函數指針
- 5. 作爲函數指針的靜態模板成員函數
- 6. 模板函數指針成員函數
- 7. 指向模板函數的指針
- 8. decltype成員函數指針作爲模板參數在c + + 11
- 9. 函數指針作爲模板參數,類型扣除失敗
- 10. 通用成員函數指針作爲模板參數
- 11. 函數指針作爲非類型模板參數
- 12. 作爲模板參數和簽名的函數指針
- 13. C++:使用函數指針作爲模板參數
- 14. 使用函數指針的類型作爲模板參數
- 15. 使用函數指針作爲模板參數
- 16. C++函數指針作爲默認模板參數
- 17. 傳遞一個函數指針作爲模板參數
- 18. 模板函數返回模板函數指針
- 19. 使用模板函數指針聲明模板函數
- 20. C++與指針參數模板函數
- 21. C++ 11/14/17:模板類指針作爲模板參數
- 22. 如何將模板類中的模板函數轉換爲函數指針
- 23. 將指針指向成員函數作爲函數指針
- 24. 傳遞重載函數指針作爲參數重載模板函數
- 25. 作爲函數指針
- 26. 使用地圖模板函數指針
- 27. 如果模板arg是函數指針
- 28. 帶模板的C++函數指針
- 29. 傳遞函數指針到模板
- 30. 模板函數指針重載
這無異於一個「模板的typedef」,這不存在。在C++ 11中,你有模板別名,但我不確定他們是否覆蓋了這種情況。 –
如果您的應用程序的大小有保證,請使用更通用的函子對象,如[Boost.Function](http://www.boost.org/doc/libs/1_47_0/doc/html/function.html),它允許您使用任何類型的可調用對象,而不僅僅是函數指針。如果你正在編寫一個小應用程序,不要打擾。 –