テンプレート化されたクラスでブロックを最適に使用する方法を理解しようとしています。 私は次のコードスニペットを持っている:エラー:初期化時に 'int(^)(int)'を 'R(^)(T)'に変換できません。
template<typename T, typename R>
class MyClass {
public:
typedef R (^Block)(T);
MyClass(Block blk) {}
};
void testMyClass() {
MyClass<int,int>::Block blk(^(int arg) {
return 1 + arg;
});
}
私はこれをコンパイルしようとすると、私は次のようなエラーメッセージが出ます:
error: cannot convert ‘int (^)(int)’ to ‘R (^)(T)’ in initialization
を私は明らかに何かが足りないのですか?許可されていないことをしようとしていますか?私がテンプレートなしで同じことをするならば、GCCはプログラムを受け入れます。
これは何であるか分かりませんが、C++ではありません。 –
ブロックは、それが意味するものであれば、言語拡張です。 http://en.wikipedia.org/wiki/Blocks_(C_language_extension) – Krumelur
これはC++ではないので、私はC++タグを削除しました。 –