Re: [問題] class當函式用
第一個()確實是operator overloading
第二個()是這個operator的參數
例如
class MyClass{
int operator()(int x,int y){return x+y;}
};
如果你產生一個物件
MyClass foo;
然後對這個物件使用()時就會呼叫這個operator
foo(1 ,2); // 1+2 = 3
連續兩組()只是單純因為這個函數不接受任何參數而已
也就是說你應該把他看成一個名為"operator()"的函數,他的參數是()
所以說你前面的理解是正確的
問題在於後面generate()這邊
generate第三個參數的需求是一個物件
而這個物件必須有定義operator()()
可以參考看看generate的實做:
template <class ForwardIterator, class Generator>
void generate ( ForwardIterator first, ForwardIterator last, Generator gen )
{
while (first != last) {
*first = gen();
^^^^^
++first;
}
}
也就是說你塞進去的gen必須可以被用()呼叫
因此generate(....., calc_square());
這邊的()並不是operator(),而是呼叫calc_square的constructor產生一個新物件
這個物件進入generate之後他的operator()才會被呼叫
所以當你把他改成generate(....., calc_square[])時
變成先呼叫operator[],產生一個int給generate用
int並沒有operator()可以給generate用,自然complier就不給你過了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.122.58
推
02/20 01:20, , 1F
02/20 01:20, 1F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
問題
2
8