У меня есть некоторый код, где классы наследуются от базового класса.
В этом базовом классе есть функция, которая при запуске должна вызывать функции, которые должны быть реализованы дочерними элементами. То есть общий алгоритм одинаков для всех детей, но реализация шагов должна быть разной.
template<class T>
class Foo
{
public:
Foo(T y):y(y) { for(int i; i < 10; ++i) x.push_back(i); };
protected:
virtual bool IsOk(T, int)=0;
void Run()
{
vector<int>::iterator it, bound;
for(int i; i < 10; ++i)
{
cout << "step " << i << endl;
bound = partition(x.begin(), x.end(), bind2nd(mem_fun_ref(&Foo<T>::IsOk), i));
for (it=x.begin(); it!=bound; ++it)
cout << " " << *it;
};
};
private:
vector<int>x;
T y;
};
class Bar : public Foo<int>
{
public:
Bar():Foo<int>(50){this->Run();};
bool IsOk(int x , int y) {return x == y;}
};
Однако, когда я это делаю, я получаю следующее сообщение об ошибке:
no matching function for call to 'mem_fun_ref(bool (Foo<int>::*)(int, int))'
Может ли кто-нибудь дать мне некоторое представление о том, что я делаю вонг?