如何使类的功能默认
Posted
技术标签:
【中文标题】如何使类的功能默认【英文标题】:How to make a class's function default 【发布时间】:2017-01-20 12:44:36 【问题描述】:示例代码:
class Sum
public:
void value(int val)_v = val;
int add(int val)return _v + val;
private:
int _v;
;
Sum sum;
sum.value(5);
int myResult = sum.add(10);
是否可以将sum.add(10)
设为默认值,这样我可以获得相同的结果:
int myArea = sum(10);
(我怀疑问题标题是错误的,也许是我找不到解决方案的原因。欢迎编辑。)
【问题讨论】:
这就是您可以覆盖运算符的内容。+
、-
、+=
、-=
...所有这些算术运算符都可以被覆盖,因此您可以赋予它们用户定义的行为。此外,您可以覆盖函数调用运算符以获得所需的确切语法。
【参考方案1】:
是的,你可以。您可以做的是重载类的operator()
以将其变成函子。你可以添加
int operator()(int val) return add(val);
到班级,现在sum(some_value)
和sum.add(some_value)
是一回事
【讨论】:
太棒了!如果函数不需要参数,是否也可能丢失()
?我的意思不是myResult = sum()
只是myResult = sum
?
@Combinatix 好吧,您可以提供一个转换运算符,将您的类型转换为其他类型。喜欢operator int() return v_;
。然后你可以像 int foo = sum;
一样使用它【参考方案2】:
这就是 function call operator 的具体用途。
class Sum
public:
void value(int val) _v = val;
int add(int val) const return _v + val;
// Function call operator
int operator()(int val) const
return add(val);
private:
int _v;
;
int main()
Sum sum;
sum.value(5);
// Calls the function call operator
int myResult = sum(10);
【讨论】:
以上是关于如何使类的功能默认的主要内容,如果未能解决你的问题,请参考以下文章