2012-03-01 62 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更多的代码。

相关问题