I've just tried to code the Binder2nd, almost same as standard code provided in functional...... please point out the mistakes........ and suggest me guidelines to write effective code..........
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;
template <class _Fn>
class Binder2: public unary_function
<typename _Fn::first_argument_type,
typename _Fn::result_type>
{
protected:
typedef typename _Fn::second_argument_type sArg_;
sArg_& secArg_;
_Fn& fn_;
public:
Binder2(_Fn const& fn,typename _Fn::second_argument_type const& sArg)
:fn_(fn),secArg_(sArg){}
typename _Fn::result_type operator()(typename _Fn::first_argument_type& arg)
{
return fn_(arg,secArg_);
}
};
template<class _Fn,class _Arg>
inline Binder2<_Fn> bind_(_Fn const& fn,_Arg const& arg)
{
return Binder2<_Fn>(fn,arg);
}
int main()
{
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
//this should print 5 10 15 20 25...... don't know why :S
std::transform(v.begin(),v.end(),v.begin(),std::ostream_iterator<int>(cout," "),bind_(std::multiplies<int>(), 5));
cout<<"\n";
cin.get();
return 0;
}
Help me in finding the error...... the error is @
bind_(std::multiplies<int>(),5)
term doesn't evaluate to a funciton taking 2 arguments :S