3

いくつかの Objective C の「コード ブロック」メソッドを C++ の同等のメソッドに変換する際に助けが必要です。お知らせ下さい。

A はコード ブロックとして使用されています...

ファイルで定義.h..

typedef void (^A)(void*); //argument is ptr to B

1つの.mmファイルで使用..

[[hello getInstance] getB]->queueLoadImageWithBlock([self.str UTF8String], (A

)^(void* img) { //コード...

            });
4

3 に答える 3

2

最も直接的なアナロジーはstd::functionです。これは、署名が与えられた値の型です (たとえばstd::function<int(int)>、適切な署名の任意の関数オブジェクトにすることができます。呼び出しサイトでブロックの代わりにラムダを使用できます。

obj->queueLoadImageWithBlock(self.url, [](void* img)
{
    UIImage* img2 = (UIImage*)img;
    UIImageView* iv = [[UIImageView alloc] initWithImage:img2];
    iv.backgroundColor = [UIColor clearColor];
    [self.iconSlot addSubview:iv];
    iconLoaded(iv);
    [iv release];
});
于 2013-01-03T23:55:53.077 に答える
1

Apple のバージョンの clang を使用すると、Objective-C だけでなく C および C++ でもブロックを使用できます。これは明らかに非標準の C++ ですが、動作します。

ラムダはブロックに割り当て可能であるため、呼び出された関数を変更せずに C++ ラムダを使用できます (ただし、その逆はできません)。詳細については、この質問を参照してください。

于 2013-01-05T00:18:59.077 に答える