函子重载最佳实践
functor overloading best practices
嗨,我正在努力掌握函子。下面是一个简单的示例
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
重用operator()
中的代码。我的总体兴趣是不必多次在运算符中重写冗长的代码,并更好地理解这样做的最佳实践。
谢谢!
我想知道是否可以重载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;
}
执行此操作的一种方法是在<functional>
中使用std::bind
。这将返回一个闭包,您可以在不带参数的情况下调用该闭包。另一种选择是为a
和b
创建一个带有默认参数的新构造函数,或者创建一个派生类,并将其重载为具有:
double operator()(const double x = m_x, const double y = m_y);
附带说明一下,请不要对成员函数的成员和参数使用相同的名称;这会产生歧义,如果以后重命名参数,甚至可能导致错误。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 继承函数的重载解析
- 你能重载对象变量名本身返回的内容吗
- 从父命名空间重载类型
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 重载操作程序时出错>>用于类中的字符串 memebr
- 实现无开销push_back的最佳方法是什么
- 一个关于在C++中重载布尔运算符的问题
- 不同翻译单元中不可重载的非内联函数定义
- 为什么使用SFINAE而不是函数重载
- 在c代码之间共享数据的最佳方式
- C++:使用 std::unique_ptr 访问重载运算符++的最佳方式?
- 使用重载添加两个矩阵的最佳方法是什么?
- C++等于(==)重载,比较所有属性的快捷方式或最佳方法
- 函子重载最佳实践
- 用私有方法重载公共方法时函数顺序的最佳实践
- 从重载集检索指向最佳匹配项的指针,而不调用
- 重载c++赋值操作符的最佳方法