读书人

对《C++ STL中文版》第一章一道习题的

发布时间: 2012-02-17 17:50:42 作者: rapoo

对《C++ STL中文版》第一章一道习题的疑问
第一章有一道特难的习题:

template<class T> inline
T sum_all(T *first, T *last)
{
T sum;
for(sum=0; first!=last; ++first)
{
sum += *first;
}
return (sum);
}

如何更改sum_all的定义,似的对于有着奇怪定义的operator=(const T&)以及
operator+=(const T&)的参数类型T,其模版特化依然有着"明智"的行为?

我在想好像不用更改sum_all的定义就能使其模版特化依然有着"明智"的行为。我实在想不出还要应付哪些特殊情况。

[解决办法]
楼主看看下面的例子:
#include <iostream >
using namespace std;

template <class T > inline
T sum_all(T *first, T *last)
{
T sum;
for(sum=0; first!=last; ++first)
{
sum += *first;
}
return (sum);
}

int main()
{
char *p[]={"jdssds","jkfslkfjsf","fkljsflsfsj"};
cout<<sum_all(*p,*(p+1));
return 0;
}

[解决办法]
template <class T > inline
T sum_all(T *first, T *last)
{
T sum=T();这样初始化.
for(; first!=last; ++first)
{
sum += *first;
}
return (sum);
}
另外需要对楼上的情况做 重载,不要特化

读书人网 >C++

热点推荐