回答
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. 是否可以限制TextCtrl只接受wxPython中的數字?
- 6. 可以以某種方式公開模板模板參數嗎?
- 7. npm包是否可以接受參數
- 8. 我們可以只爲某些數據類型定義模板函數嗎?
- 9. JavaScript:我能以某種方式強大的類型函數參數嗎?
- 10. 強制一個函數只接受一組特定的數據類型
- 11. 從模板參數類型中扣除函數模板參數
- 12. C++ 11可變參數函數類型模板參數
- 13. 強制執行模板參數類的函數?
- 14. 是否有可能使函數接受給定參數的多種數據類型?
- 15. C++ - 是否可以從模板中的成員函數類型中提取類和參數類型?
- 16. 只使用一種方法,接受不同類型的參數
- 17. 函數指針非類型模板參數轉換爲類型模板參數
- 18. 接受函數的函數中參數的類型
- 19. 是否有可能只接受整數列表的Ocaml函數?
- 20. 專業模板類成員函數只有一種類型的
- 21. C++強制模板參數
- 22. 是否有TypeScript'Partial <any>`類型的函數參數接受`any`,但是`void`?
- 23. 模板變量是否可以用作模板參數(類似於類模板)?
- 24. 你可以讓一個函數接受兩種不同的數據類型嗎?
- 25. 是否可以將函數模板作爲模板參數傳遞?
- 26. Numeric.AD函數中可接受的類型
- 27. 是否可以通過PHP函數的可接受參數傳遞HTML?
- 28. 在函數中是否可以將類型作爲參數?
- 29. 是否可以減少樣板函數中的參數數量?
- 30. 帶模板參數的模板函數的類型推斷
「顯式」構造函數? – 2013-02-15 18:45:58
@cppinitiator:Eh? – 2013-02-15 18:47:59