【发布时间】:2011-11-16 17:45:01
【问题描述】:
我正在尝试了解如何最好地利用我的模板类中的块。 我有以下代码sn-p:
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++。
-
Blocks 是一种语言扩展,如果这就是你的意思的话。 en.wikipedia.org/wiki/Blocks_(C_language_extension)
-
我删除了 C++ 标签,因为这不是 C++。
-
具有编译器特定扩展的 C++ 是否仍可称为 C++?我不知道。
-
回滚标签删除。 GCC 可以使用 Apple 的块扩展 来构建 C++ 项目。
标签: c++ macos gcc objective-c-blocks