如何从同一个 class 的另一个成员函数调用仿函数?

How to call a functor from another member function of the same class?

我已经重载了 () 运算符来为我进行比较,我想将其作为比较器发送到 std 排序函数调用的第三个参数。现在,这个调用在另一个名为 threeSum 的成员函数中。我发现发送 Solution() 有效,但 this() 无效。这个的语法规则是什么?

class Solution 
{
public:    
    bool operator() (int i, int j)
    {
        return (i < j);
    }

    vector<vector<int> > threeSum(vector<int> & nums) 
    {
        sort(nums.begin(), nums.end(), this());

        vector<vector<int> > ret_vec;
        ...
        return ret_vec;
    }
};

谢谢。

this() 不起作用的原因是因为 this 是一个指针。您需要先取消引用它。

(*this)(args);

在你的情况下,你应该这样写:

sort(nums.begin(), nums.end(), (*this));

或者,如果你想更明确一点:

Solution& this_val = *this;
sort(nums.begin(), nums.end(), this_val);

非静态成员函数(包括任何仿函数)需要包含对象的地址作为其隐式参数。您可以使用 lambda 函数来实现效果:

vector<vector<int> > threeSum(vector<int> & nums) 
{
  auto mysort = [this](int i, int j) {
    return operator()(i, j); 
  };
  sort(nums.begin(), nums.end(), mysort);
  ...
}

此处 lambda 函数 mysort 捕获包含对象 (this) 的 运行 时间地址,并将其用作 operator() 的隐式参数,这std::sort.

现在可以使用

编辑:此方法不仅适用于仿函数,也适用于其他成员函数。但是,如果您只想使用函子进行排序,那么直接提供 (*this) 作为 sort 的第三个参数的另一个答案可能会稍微有效一些。