如何从同一个 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
的第三个参数的另一个答案可能会稍微有效一些。
我已经重载了 () 运算符来为我进行比较,我想将其作为比较器发送到 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
的第三个参数的另一个答案可能会稍微有效一些。