我只是想知道如果我可以做一個模板類,像這樣:有沒有辦法對模板類進行限制?
template <class T> void DoSomething(T something);
,但我想它限制爲只需要浮動或例如一個int。這可以做到嗎?
我只是想知道如果我可以做一個模板類,像這樣:有沒有辦法對模板類進行限制?
template <class T> void DoSomething(T something);
,但我想它限制爲只需要浮動或例如一個int。這可以做到嗎?
一個選項是使用boost::enable_if,它可以用來排除你的模板函數不被考慮,這取決於T代表的類型。例如,
template <class T>
typename boost::enable_if<boost::is_arithmetic<T>, void>::type DoSomething(T t);
會限制你的模板函數積分和浮點類型。
是的,看看模板專業化。這裏 - http://www.parashift.com/c++-faq-lite/templates.html#faq-35.7
專業化不會限制輸入的類型。它根據輸入進行專業化。 – Joel 2012-03-01 21:25:36
是的,你可以提供float或int的專精,或者你想要的任何類型,對於你不想要的類型,只需要默認實現,這可能是什麼也不做。我希望我有所幫助? – DotNetUser 2012-03-01 21:34:33
使用這種方法,充其量你可以使它在非算術類型的運行時拋出一個異常。最好在編譯時檢查一下,正如rkjnsn在他的答案中所暗示的那樣。 – 2012-03-01 21:45:09
你也可以重載所有支持類型的函數。這會產生比使用(boost|std)::enable_if
更多的代碼。
或者,如果你使用的是C++ 11,它有'std :: enable_if',它基本上是一樣的。 – 2012-03-01 21:43:27
所以你會做什麼是字符數組? – Pittfall 2012-03-02 14:48:29
@AlexKorban我的理解是'std :: enable_if'實際上和'boost :: enable_if_c'功能相同,所以你需要'std :: enable_if :: value,void>'。 –
rkjnsn
2012-03-02 22:41:04