hn.ft.pris@gmail.com wrote:
Quote:
I've got following code test C++'s functor. For the sake of
easy-reading, I omit some declearations.
>
>
>
#include <algorithm>
#include <functional>
>
using namespace std;
>
template <typename Tclass Sum{
public:
Sum(T i=0):sum(i){};
inline void operator () (T x){
sum += x;
}
inline T output() const{
return sum;
}
>
private:
T sum;
};
>
int main( void ){
>
>
vector<intvec(10, 1);
>
Sum<intsum;
>
sum = for_each(vec.begin(), vec.end(), Sum<int>()); .......(1)
sum = for_each(vec.begin(), vec.end(), sum); .........(2)
sum = for_each(vec.begin(), vec.end(), sum.operator()(int) ); ...(3)
>
cout << sum.output() << endl;
>
return 1;
}
>
It's easy to understand that (2) works, because sum.operator()(int) is
called implicitly. (1) also works, it confuses me. Does Sum<int>()
create an implicit class Sum object?
There is nothing implicit about the function object. Although: it is a
temporary.
Quote:
On the other hand, Sum<int doesn't work.
Right: Sum<intjust denotes a type. It is not an expression that evaluates
to an object of that type.
Quote:
(3) fails, does it means the third argument of "for_each" couldn't be a
function pointer?
No, it just means you got the syntax wrong.
Quote:
What will the code be if I want to pass a function pointer here?
Well, just pass a function pointer. Something like:
void inc_5 ( int & a ) { a+=5; }
....
for_each( vec.begin(), vec.end(), &inc_5 );
(warning, I just typed it into the newsreader, so there may be typos in the
code.)
Best
Kai-Uwe Bux