我有一些代码,其中类继承自基类。
该基类有一个函数,在运行时,应该调用由子函数实现的函数。也就是说,所有孩子的通用算法都是相同的,但步骤的实现应该有所不同。
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))'
有人能为我提供一些关于我在做什么的见解吗?
答案 0 :(得分:3)
mem_fun_ref
仅适用于带有一个或不带参数的函数。要实现您的想法,您必须使用boost::bind
(C ++ 0x中标准库的一部分)。
答案 1 :(得分:0)
以下是mem_fun_ref
template <class S, class T>
mem_fun_ref_t<S,T> mem_fun_ref (S (T::*f)());
template <class S, class T, class A>
mem_fun1_ref_t<S,T,A> mem_fun_ref (S (T::*f)(A));
template <class S, class T>
const_mem_fun_ref_t<S,T> mem_fun_ref (S (T::*f)() const);
template <class S, class T, class A>
const_mem_fun1_ref_t<S,T,A> mem_fun_ref (S (T::*f)(A) const);
您的mem_fun_ref(bool (Foo<int>::*)(int, int))
与这些&amp;因此错误。