回答
template <typename T>
typename std::enable_if<std::is_floating_point<T>::value, T>::type foo() { ... }
它是完全標準SFINAE;我們啓用返回類型。如果T不是浮點類型,則std::is_floating_point<T>::value
將爲false
,std::enable_if<false, T>
不會提供type
typedef,這會導致該函數不可編譯。
有關這些標準庫類的信息,請參閱http://en.cppreference.com/w/cpp/types。
有關它如何工作的一些解釋會很好。 – 2013-02-15 18:48:35
這樣比較好:D – 2013-02-15 19:05:18
是,使用模板專業化和SFINAE:
template<typename T>
struct foo_enabled
{
};
template<>
struct foo_enabled<float>
{
typedef void *value;
};
template<>
struct foo_enabled<double>
{
typedef void *value;
};
template<>
struct foo_enabled<long double>
{
typedef void *value;
};
template <typename T>
T foo(typename foo_enabled<double>::value=NULL){ ... }
當然,如果你有C++ 11,安德烈·蒂塔的解決方案是更聰明。
這是我的想象還是您之前找到的Markdown錯誤。 – 2013-02-15 19:05:38
@LightnessRacesinOrbit:不知道...我複製,粘貼,出錯了。刪除,複製,再次粘貼幾次,最後它正確。也許在邊緣有一些看不見的角色... – rodrigo 2013-02-15 19:45:35
mm我嘗試在meta上簡單重現並失敗;並沒有進一步研究它,但它在那裏看起來很有趣。那麼,fsvo無論如何都是「有趣的」;) – 2013-02-15 22:22:01
- 1. 是否可以強制參數成爲某種類型的鍵?
- 2. 接受嵌套可變參數類模板作爲函數模板的參數
- 3. 模板成員函數不接受任何類型的參數?
- 4. 是否有可能限制泛型參數只接受可空類型?
- 5. 如何測試一個函數只接受某種類型?
- 6. 接受模板類的模板函數
- 7. 基於模板參數的模板類強制參數數
- 8. 是否可以使用參數包來允許模板函數接受等效類型?
- 9. 是否可以限制TextCtrl只接受wxPython中的數字?
- 10. 可以以某種方式公開模板模板參數嗎?
- 11. npm包是否可以接受參數
- 12. 我們可以只爲某些數據類型定義模板函數嗎?
- 13. JavaScript:我能以某種方式強大的類型函數參數嗎?
- 14. 一種特定類型的可變參數模板參數
- 15. 是否可以定義「模板函數指針」的類型?
- 16. 強制一個函數只接受一組特定的數據類型
- 17. 使用一個stringstream函數參數接受多種類型
- 18. 是否可以從指針模板參數中提取類型?
- 19. 從模板參數類型中扣除函數模板參數
- 20. 是否有可能使函數接受給定參數的多種數據類型?
- 21. C++ 11可變參數函數類型模板參數
- 22. 強制執行模板參數類的函數?
- 23. C++ - 是否可以從模板中的成員函數類型中提取類和參數類型?
- 24. 只使用一種方法,接受不同類型的參數
- 25. 函數指針非類型模板參數轉換爲類型模板參數
- 26. 是否有可能只接受整數列表的Ocaml函數?
- 27. 接受函數的函數中參數的類型
- 28. 專業模板類成員函數只有一種類型的
- 29. C++強制模板參數
- 30. 模板變量是否可以用作模板參數(類似於類模板)?
「顯式」構造函數? – 2013-02-15 18:45:58
@cppinitiator:Eh? – 2013-02-15 18:47:59