cocos2dxicon

【c++】(基礎だけど)lambda式の注意について

LINEで送る
Pocket

lambda式とは、c++11からサポートされた無名関数です。

Objective-Cで言うblocksみたいなやつなのですが、基礎的な所の注意点を一つ書きたいと思います。



インスタンスはデフォルトで、コピーされる


もう上に書いた通りなのですがコードで見ていきましょう。
「Nodeを格納するVectorを宣言し、そのVectorにlambda式内でNodeを追加する」、と言う感じですね。


(ぱっと見、)コード的には1を期待したい所ですが、これは0が出力されます。
何がおかしいのでしょうか。ポインタを出力してみましょう。
(実は、ポインタの出力もつまづいたのでブログ書きましたw)


0x178223e88
0x16fd70900 0

そうです、lambda式内ではnodesインスタンスがコピーされて入ったのでポインタも違います。

(これは憶測なのですが)更に、コピーされた際にクラス情報も失いpushBackメソッドが使えなくなっています。
明示的にキャストする事でpushBackを用いています。


参照渡しで解決!

上記は下記の様に訂正する事で正しく動作します。


出力は以下です。

0x16fd98900
0x16fd98900 1

正しく動作している事が確認出来ました。
更に参照渡しをする事により正しくクラス情報も渡り、pushBackも使える事が確認出来ました。

誰かのお役に立てば。

このブログのcocos記事一覧

LINEで送る
Pocket

Dalt

translimit, Inc. Application Engineer. Twitter: @daiki1003 Facebok: Daiki Asahi

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です