Я хочу сохранить «связующее» функции в переменной, чтобы использовать ее повторно в следующем коде, используя средства перегрузки операторов. Вот код, который на самом деле делает то, что я хочу:
#include <boost/bind.hpp>
#include <vector>
#include <algorithm>
#include <iostream>
class X
{
int n;
public:
X(int i):n(i){}
int GetN(){return n;}
};
int main()
{
using namespace std;
using namespace boost;
X arr[] = {X(13),X(-13),X(42),X(13),X(-42)};
vector<X> vec(arr,arr+sizeof(arr)/sizeof(X));
_bi::bind_t<int, _mfi::mf0<int, X>, _bi::list1<arg<1> > > bindGetN = bind(&X::GetN,_1);
cout << "With n =13 : "
<< count_if(vec.begin(),vec.end(),bindGetN == 13)
<< "\nWith |n|=13 : "
<< count_if(vec.begin(),vec.end(),bindGetN == 13 || bindGetN == -13)
<< "\nWith |n|=42 : "
<< count_if(vec.begin(),vec.end(),bindGetN == 42 || bindGetN == -42)
<< "\n";
return 0;
}
Что меня беспокоит, так это, конечно, строка:
bi::bind_t<int, _mfi::mf0<int, X>, _bi::list1<arg<1> > > bindGetN = bind(&X::GetN,_1);
Я получил тип, просто сделав ошибку типа и проанализировав сообщение об ошибке. Это, конечно, не очень хороший путь. Есть ли способ получить тип для "bindGetN"? Или, может быть, есть разные способы создания аналогичной функциональности?
Редактировать: Я забыл упомянуть, что, так сказать, "стандартное" предложение использовать function
в этом случае не работает - потому что я хотел бы, чтобы мой оператор перегружался.