2013-12-09 50 views
-2

我遇到了這個頂層函數在C++文件。 所以我的問題是:奇怪的函數調用像語法

  1. 什麼是smt2::parser類型聲明呢?
  2. 此功能稱爲什麼?
  3. 與定期致電p(ctx, is, interactive);有什麼不同?

下面的代碼:

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

不幸的是,我一直沒能找到p()使用grep的定義(一個或多個)爲止。我會在找到定義時更新帖子(手動追蹤標題可能需要一段時間)。

+1

尋找smt2 :: parser中的函數調用操作符。請參閱http://stackoverflow.com/questions/2349867/how-can-it-be-useful-to-overload-the-function-call-operator –

+0

@KateGregory Naw。 – 2013-12-09 21:53:09

+1

這是一個C++風格的對象初始化。 – 2013-12-09 21:53:31

回答

6

直接判斷有點困難。但是我想象的是smt2::parser是一個類或結構類型的名稱。該行

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

調用該類/結構的構造函數。由stm2::parser定義的類可能會超載運算符()。我發現a tutorial有關函數調用的操作符重載的更多信息。

+0

@Kate Gregory,感謝您的編輯。這使得答案更具可讀性。 –

3

在OP提供的代碼中,psmt2::parser類型的對象。它調用一個構造函數,它有三個參數。 p()調用一個重載操作符(可能爲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; 
}