我有这行代码,需要能够使用我正在编写的代码运行:
euro(2, Regular)
euro
是来自名为MainControl
的类的对象,并且我定义了一个枚举:
enum VoterType { All, Regular, Judge };
我基本上了解到我们想使用名为MainControl
的类中的某些方法,但是我没有看到应该使用的方法的名称?
鉴于此函数返回void
的事实,该声明在类MainControl
中的外观应该是什么样?
答案 0 :(得分:4)
MainControl
类正在实现自定义overloaded operator,即“函数调用运算符” 。
该声明在MainControl类中应该看起来如何?
方法签名应类似于:
class MainControl {
// ...
public:
void operator()(int, VoterType);
};
当用户定义的类重载函数调用运算符operator()时,它将变为FunctionObject类型。
简而言之,您的类实例(euro
)是 FunctionObject ,并且该特定方法可以简单地调用为例如:
euro(2, VoterType::Regular)
附加说明
仅出于完整性考虑,“操作员方法”就像另一种方法(此处没有“黑魔法”)。
实际上,您甚至可以使用全名来调用它:
euro.operator()(2, VoterType::Regular);
但是语法变得很丑。