簡體   English   中英

在struct中定義operator()函數

[英]Defining operator() function inside a struct

這里通過函數包裝器瀏覽Boost庫中的一個教程時,我遇到了以下代碼:

  1     boost::function<float (int x, int y)> f;
  2
  3     struct int_div {
  4         float operator() (int x, int y) const { return ((float)x)/y; }
  5     };
  6
  7
  8     int main()
  9     {
 10         f = int_div();
 11         cout << f(5, 3) << endl;
 12         return 0;
 13     }

我試圖圍繞在struct中定義一個函數( operator() ),然后將struct(using () )賦值給函數包裝器f 在第3-5和第10行中,有人可以幫助我了解正在發生的事情。

在C ++中,您可以為類型提供運算符。 由於函數調用( () )只是該語言中的另一個運算符,因此可以為您的類型定義它。 所以int_div的定義說“ int_div類型的int_div可以將函數調用運算符應用於它們(使用操作數intint );這樣的調用將返回一個float 。”

boost::function是任何可調用的包裝器。 由於int_div類型的對象可以與函數調用運算符一起使用,因此它是可調用的,因此可以存儲在boost::function 類型也匹配 - int_div的運算符確實是float(int, int)

但是,第10行的括號​​不是該運算符的調用; 他們是構造函數調用。 所以該行說“使用該類型的默認構造函數創建int_div類型的對象,並將該對象分配給f 。”

如果您使用的是C ++ 11,則可以將第10行編寫為:

f = int_div{};

這可能有助於你的困惑。 此行創建一個int_div類型的臨時對象,然后將其分配給f

這不是一個函數調用,即使它看起來像一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM