2012-03-01 59 views

回答

6

一個選項是使用boost::enable_if,它可以用來排除你的模板函數不被考慮,這取決於T代表的類型。例如,

template <class T> 
typename boost::enable_if<boost::is_arithmetic<T>, void>::type DoSomething(T t); 

會限制你的模板函數積分和浮點類型。

+0

或者,如果你使用的是C++ 11,它有'std :: enable_if',它基本上是一樣的。 – 2012-03-01 21:43:27

+0

所以你會做什麼是字符數組? – Pittfall 2012-03-02 14:48:29

+0

@AlexKorban我的理解是'std :: enable_if'實際上和'boost :: enable_if_c'功能相同,所以你需要'std :: enable_if :: value,void>'。 – rkjnsn 2012-03-02 22:41:04

1

是的,看看模板專業化。這裏 - http://www.parashift.com/c++-faq-lite/templates.html#faq-35.7

+0

專業化不會限制輸入的類型。它根據輸入進行專業化。 – Joel 2012-03-01 21:25:36

+0

是的,你可以提供float或int的專精,或者你想要的任何類型,對於你不想要的類型,只需要默認實現,這可能是什麼也不做。我希望我有所幫助? – DotNetUser 2012-03-01 21:34:33

+1

使用這種方法,充其量你可以使它在非算術類型的運行時拋出一個異常。最好在編譯時檢查一下,正如rkjnsn在他的答案中所暗示的那樣。 – 2012-03-01 21:45:09

0

你也可以重載所有支持類型的函數。這會產生比使用(boost|std)::enable_if更多的代碼。

相關問題