首页 > 解决方案 > 调用没有名字的方法

问题描述

我有这一行,我需要能够使用我正在编写的代码运行:

 euro(2, Regular)

euro是一个名为 的类的对象MainControl,我定义了一个枚举:

enum VoterType { All, Regular, Judge };

基本上我知道我们想使用名为的类中的一些方法MainControl,但我没有看到应该使用的方法的名称?

考虑到这个函数返回的事实,void声明在类中应该是什么样子MainControl

标签: c++

解决方案


MainControl类正在实现一个自定义的重载运算符,即“函数调用运算符”

MainControl 类中的声明应该是什么样子的?

方法签名应该类似于:

class MainControl {
  // ...
 public:
  void operator()(int, VoterType);
};

当用户定义的类重载函数调用运算符 operator() 时,它就变成了 FunctionObject 类型。

简而言之,您的类实例 ( euro) 是一个FunctionObject并且可以简单地调用该特定方法(例如):

euro(2, VoterType::Regular)

补充说明

只是为了完整起见,“运算符方法”就像另一种方法(这里没有黑魔法)。

实际上,您甚至可以使用完整名称调用它:

euro.operator()(2, VoterType::Regular);

但是语法变得非常难看。


推荐阅读