今天做程式練習時,嘗試著把以下的code轉成Lambda的語法
1: template <typename T>
2: bool bothEvenOrOddT(T elem1,T elem2)
3: {
4: return ((elem1 & 0x01) == (elem2 & 0x01));
5: }
一開始是這樣寫
1: template <typename T>
2: bool bothEvenOrOddT(T elem1,T elem2)
3: {
4: return [elem1,elem2] { return ((elem1 & 0x01) == (elem2 & 0x01)); };
5: }
噹!噹!!噹!!!得到以下的error message。
error C2440: 'return' : cannot convert from '`anonymous-namespace'::<lambda1>' to 'bool'
...
template的錯誤提示與實際不符合也不是新聞了,這個錯誤事實上和轉型一點關係也沒有,正確的改法要從functor來想,加上( )就可以成功編譯了。修正後的正確程式碼如下:
1: template <typename T>
2: bool bothEvenOrOddT(T elem1,T elem2)
3: {
4: return [elem1,elem2] { return ((elem1 & 0x01) == (elem2 & 0x01)); } ();
5: }
沒有留言:
張貼留言