1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| template<class T>
class Sum_wrapper
{
T *t_ptr;
public:
typedef T type;
explicit Sum_wrapper(T & t): t_ptr(&t) {}
operator T& () const { return *t_ptr; }
template<typename V>
void operator()(V const & r) const { (*t_ptr)(r); }
};
template <typename T>
class Sum
{private:
T sum;
public:
Sum(){ sum = 0;};
void operator()( T n )
{
sum += n;
};
T getResult()
{
return this->sum;
};
};
int main()
{
std::vector<int> v;
v.push_back( 1 );
v.push_back( 2 );
v.push_back( 3 );
Sum<int> sumFunc;
std::for_each( v.begin(), v.end(), Sum_wrapper< Sum<int> >(sumFunc) );
std::cout << sumFunc.getResult() << std::endl;
system( "pause" );
return 0;
} |