2013年5月4日 星期六

[筆記] error C2440: 'return' : cannot convert from '`anonymous-namespace'::<lambda1&gt' to 'bool'

今天做程式練習時,嘗試著把以下的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: }

沒有留言:

張貼留言