求助:函数模板的问题,c++primer课后习题
题目:
16.9 编写行为类似于标准库中find算法的模板。你的模板应接受一个类型形参,该形参指定函数形参(一对迭 代器)的类型。使用你的函数在vector<int> 和vector<string>中查找给定值。
我写的函数代码:
template<typename T>
typename T::iterator find(typename T::iterator beg, typename T::iterator end, typename T::value_type value)
{
for (; beg != end; ++beg)
{
if (*beg == value)
return beg;
}
return end;
}
//调用代码
viter = find(ivec.begin(), ivec.end(), 3);
siter = find(svec.begin(), svec.end(), string("McHeaven"));
template<typename T>
typename T find(T beg, T end, typename std::iterator_traits<T>::value_type value)
template<typename Iterator,typename Object> Iterator
find(Iterator beg, Iterator end, const Object &value){
for (; beg != end; ++beg) {
if (*beg == value)
return beg;
}
return end;
}
2)模板不能逆向推导
template<typename T> typename T::iterator find(typename T::iterator beg, typename T::iterator end, typename T::value_type value) { for (; beg != end; ++beg) { if (*beg == value) return beg; } return end; }
这是逆向推导
由函数参数类型,typename T::iterator,typename T::value_type 逆向推导模板参数 T,
这不是C++模板,类型推导,所能够做到的。