对《C++ STL中文版》第一章一道习题的疑问解决办法
对《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);
}
另外需要对楼上的情况做 重载,不要特化
第一章有一道特难的习题:
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);
}
另外需要对楼上的情况做 重载,不要特化