[英]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
可以將函數調用運算符應用於它們(使用操作數int
和int
);這樣的調用將返回一個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.