例如返回一个函数指针,如何使用下面的pf呢
auto pf(const string &, const string &) -> bool (*)(const string &s1, const string &s2); bool LengthCompare(const string &temp1, const string &temp2) { return temp1 < temp2; }
小伙看你根骨奇佳,潜力无限,来学PHP伐。
我認為題主你一定有什麼搞錯了。首先在C++裡面,函數pf接受兩個string,然後回傳一個函數指標(重點:他不是閉包),這個新函數又接受了兩個string然後回傳bool。這種函數幾乎是沒有什麼意義的,除非兩個string的目的就是找一個函數來回傳。
一般來講,尾置回傳型別是為了使用decltype,或是純粹讓程式碼變得更可讀。譬如說上面那個pf,就有另外一種寫法:
bool(*pf)(const string&, const string&)(const string&, const string&);
decltype的例子如下,譬如說你可能不知道a+b到底回傳什麼類型:
template<typename T, typename U> auto Add(T t, U u) -> decltype(t + u) { return t + u; }
這樣你不但可以Add(1, 2),還可以Add(3.0, 4.0f),甚至可以Add("VczhIsAGenius", 7)了。
最後,如果你說拿到這樣的一個pf該怎麼使用,那一定跟下面的寫法差不多:
bool result = pf("1", "2")("a", "b");
我建議你重新檢視一下你的題目。
我認為題主你一定有什麼搞錯了。首先在C++裡面,函數pf接受兩個string,然後回傳一個函數指標(重點:他不是閉包),這個新函數又接受了兩個string然後回傳bool。這種函數幾乎是沒有什麼意義的,除非兩個string的目的就是找一個函數來回傳。
一般來講,尾置回傳型別是為了使用decltype,或是純粹讓程式碼變得更可讀。譬如說上面那個pf,就有另外一種寫法:
decltype的例子如下,譬如說你可能不知道a+b到底回傳什麼類型:
這樣你不但可以Add(1, 2),還可以Add(3.0, 4.0f),甚至可以Add("VczhIsAGenius", 7)了。
最後,如果你說拿到這樣的一個pf該怎麼使用,那一定跟下面的寫法差不多:
我建議你重新檢視一下你的題目。