为什么我对mem_fun_ref的调用“没有匹配功能”?

时间:2011-05-26 12:28:29

标签: c++ inheritance binding virtual-functions override

我有一些代码,其中类继承自基类。

该基类有一个函数,在运行时,应该调用由子函数实现的函数。也就是说,所有孩子的通用算法都是相同的,但步骤的实现应该有所不同。

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))'

有人能为我提供一些关于我在做什么的见解吗?

2 个答案:

答案 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;因此错误。