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. C++函數指針作爲模板
- 3. 爲模板的成員函數指針作爲模板參數
- 4. 模板函數指針作爲模板參數
- 5. C++函數指針函數,需要模板作爲參數
- 6. 模板函數指針
- 7. 模板函數指針
- 8. 模板函數指針
- 9. C++模板函數指針
- 10. 模板和函數指針
- 11. 作爲函數指針的靜態模板成員函數
- 12. 模板函數指針成員函數
- 13. 指向模板函數的指針
- 14. 無法傳遞空函數指針作爲模板參數
- 15. 如何使用通用函數指針作爲模板參數?
- 16. 使用函數指針作爲模板參數
- 17. 使用函數指針的類型作爲模板參數
- 18. 外部定義的函數指針作爲模板參數
- 19. C++:使用函數指針作爲模板參數
- 20. 函數指針作爲模板參數,類型扣除失敗
- 21. C++函數指針作爲默認模板參數
- 22. 傳遞一個函數指針作爲模板參數
- 23. 函數指針作爲非類型模板參數
- 24. 成員函數指針作爲模板參數的問題
- 25. 靜態成員函數指針作爲模板參數
- 26. decltype成員函數指針作爲模板參數在c + + 11
- 27. 作爲模板參數和簽名的函數指針
- 28. 通用成員函數指針作爲模板參數
- 29. 模板函數返回模板函數指針
- 30. 使用模板函數指針聲明模板函數
這無異於一個「模板的typedef」,這不存在。在C++ 11中,你有模板別名,但我不確定他們是否覆蓋了這種情況。 –
如果您的應用程序的大小有保證,請使用更通用的函子對象,如[Boost.Function](http://www.boost.org/doc/libs/1_47_0/doc/html/function.html),它允許您使用任何類型的可調用對象,而不僅僅是函數指針。如果你正在編寫一個小應用程序,不要打擾。 –