函数模板中的默认模板化参数
我正在回答这个问题。我意识到当我不知道自己在说什么时我就说漏了嘴。
所以我的问题是这样的。是否可以将这些功能合并为一个? (不用担心这是一个已经存在的函数的精确副本,我只是将其用作示例)
template <class iterType1, class iterType2, class boolPred>
bool equal(iterType1 begin, iterType1 end, iterType2 e, boolPred pred){
while(begin != end){
if(!pred(*begin, *e))
return false;
++begin;
++e;
}
return true;
}
template <class iterType1, class iterType2>
bool equal(iterType1 begin, iterType1 end, iterType2 e){
return equal(begin, end, e, std::equal_to<decltype(*begin)>());
}
此外,甚至可以在不使用 C++0x 的情况下重新使用第二个函数中第一个函数的代码特征(decltype)。
I was answering this question. And I realized that I ran my mouth off when I didn't know what I was talking about.
So my question is this. Is it possible to merge these functions in to one? (don't worry that this is an exact duplicate of a function that already exists, I'm just using it as an example)
template <class iterType1, class iterType2, class boolPred>
bool equal(iterType1 begin, iterType1 end, iterType2 e, boolPred pred){
while(begin != end){
if(!pred(*begin, *e))
return false;
++begin;
++e;
}
return true;
}
template <class iterType1, class iterType2>
bool equal(iterType1 begin, iterType1 end, iterType2 e){
return equal(begin, end, e, std::equal_to<decltype(*begin)>());
}
Furthermore, is re-using the code from the first in the second even possible without using C++0x features(decltype).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
遗憾的是,没有。函数模板参数不能有默认模板参数,并且默认函数参数不能用于推导模板参数。
是的:您可以使用
std::iterator_traits::value_type
。Sadly, no. You can't have a default template argument for a function template parameter and default function arguments cannot be used to deduce template arguments.
Yes: you can use
std::iterator_traits<T>::value_type
.