奇怪的函数调用就像语法一样

时间:2013-12-09 21:50:03

标签: c++

我在 C ++ 文件中遇到过这个顶级函数。 所以我的问题是:

  1. smt2::parser类型声明到底在做什么?
  2. 这个功能叫做什么?
  3. p(ctx, is, interactive);的常规通话有什么不同?
  4. 以下是代码:

    bool parse_smt2_commands(cmd_context & ctx, std::istream & is, bool interactive) {
        smt2::parser p(ctx, is, interactive);
        return p();
    }
    

    不幸的是,到目前为止,我还没能找到p()与grep的定义。当我找到定义时,我会更新帖子(跟踪标题包括手动可能需要一段时间)。

2 个答案:

答案 0 :(得分:6)

直接说出来有点困难。但我想象的是smt2::parser是类或结构类型的名称。这条线

stm2::parser p(ctx,is,interactive);

调用该类/ struct的构造函数。 stm2::parser定义的类可能会重载()运算符。我找到了a tutorial,其中包含有关函数调用的运算符重载的更多信息。

答案 1 :(得分:3)

在OP中提供的代码中,psmt2::parser类型的对象。它调用一个带三个参数的构造函数。 p()调用一个返回bool的重载运算符(可能是operator()())。

以下是一个例子:

class Test {
public:
Test(int i, char j, bool k) {
}
~Test() { }

bool operator()() const {
return true;
}
};

在这种情况下,我们只是简单地调用操作员来演示正在发生的事情。

int main() {
std::cout << Test(1, 'a', true)(); // 1
return 0;
}