C++ 函子重载最佳实践
嗨,我正在努力掌握函子。下面是一个简单的例子C++ 函子重载最佳实践,c++,operator-overloading,operator-keyword,functor,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,使其可以通过b,c,也可以通过x重用操作符()中的代码。我的总体兴趣是不必多次在操作符中重新编写冗长的代码,并且更
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,使其可以通过b
,c
,也可以通过x
重用操作符()中的代码。我的总体兴趣是不必多次在操作符中重新编写冗长的代码,并且更好地理解这样做的最佳实践
谢谢 一种方法是使用
中的std::bind
。这将返回一个闭包,您可以不带参数地调用它。另一种方法是使用a
和b
或派生类的默认参数创建一个新构造函数,并将其重载为具有:
double operator()(const double x = m_x, const double y = m_y);
作为旁注,请不要对成员函数的成员和参数使用相同的名称;这会产生歧义,如果以后重命名参数,甚至可能导致错误。一种方法是使用
中的std::bind
。这将返回一个闭包,您可以不带参数地调用它。另一种方法是使用a
和b
或派生类的默认参数创建一个新构造函数,并将其重载为具有:
double operator()(const double x = m_x, const double y = m_y);
作为旁注,请不要对成员函数的成员和参数使用相同的名称;这会产生歧义,如果以后重命名参数,甚至可能导致错误
我想知道是否有可能重载A,这样它就可以通过b、c和例如x来重用操作符()中的代码
是的,这不难做到
double operator()(double x, double y) // Remove the const. It's useless.
{
// Call the other overload using the member data.
return (*this)(b, c, x, y);
}
double operator()(double bb, double cc, double x, double y)
{
// Not using any member data at all.
return bb*cc*x*y;
}
我想知道是否有可能重载A,这样它就可以通过b、c和例如x来重用操作符()中的代码
是的,这不难做到
double operator()(double x, double y) // Remove the const. It's useless.
{
// Call the other overload using the member data.
return (*this)(b, c, x, y);
}
double operator()(double bb, double cc, double x, double y)
{
// Not using any member data at all.
return bb*cc*x*y;
}
不应该通过b(bb),c(cc)
吗b(b),c(c)
?那是什么/在哪里?@Chad我的意思是b
,c
或x
@Galik我的编译器对上面的格式很满意,在构造函数中,你觉得有必要重复使用b*c*x*y
?不应该b(bb),c(cc)
beb(b),c(c)
?传递a
?那是什么/在哪里?@Chad我的意思是b
,c
或x
@Galik我的编译器对上面的格式很满意,在构造函数中,你觉得有必要重用一个做b*c*x*y
的代码吗?@R Sahu你的解决方案正在我的代码中运行。非常感谢您直截了当地回答问题,特别是回答了被问到的问题@R Sahu您的解决方案在我的代码中运行。非常感谢您直截了当地回答问题,特别是回答了被问到的问题!