仿函数重载最佳实践

时间:2015-11-19 20:52:54

标签: c++ operator-overloading operator-keyword functor

您好,我正在努力掌握仿函数。这是一个简单的例子

struct A {
 double b,c;
 A(const double bb, const double cc) : b(bb), c(cc) {}
 double operator()(const double x, const double y) {
  return b*c*x*y;
 }
};

我想知道是否可以重载A以使其可以传递bc以及例如x重用operator()中的代码。我的整体兴趣是不必多次在运算符中重写冗长的代码,并且更好地理解执行此操作的最佳实践。

谢谢!

2 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是使用std::bind中的<functional>。这将返回一个可以不带参数调用的闭包。另一种方法是使用ab或派生类的默认参数创建一个新构造函数,并将其重载为:

double operator()(const double x = m_x, const double y = m_y);

作为旁注,请不要对成员函数的成员和参数使用相同的名称;如果你稍后重命名参数,会产生歧义,甚至可能导致错误。

答案 1 :(得分:0)

  

我想知道是否可以重载A使得它可以通过b,c以及例如x重用operator()中的代码。

是的,这样做并不难。

<span class="check-status"><a href="status.php" >Your status is pending</a></span>