Kru*_*lur 3 c++ macos gcc objective-c-blocks
我试图了解如何在我的模板类中最好地利用块.我有以下代码片段:
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;
});
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我收到以下错误消息:
error: cannot convert ‘int (^)(int)’ to ‘R (^)(T)’ in initialization
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西吗 我想做一些不允许的事吗?如果我在没有模板的情况下做同样的事情,GCC会接受该程序.
这是海湾合作委员会的一个问题.我在LLVM 3下测试了你的程序,编译得很好.
在GCC 4.2的块实现中存在许多问题,有时可以通过完全限定块声明^int(int arg){return 1 + arg;}来解决这些问题,但在这种情况下它无法解决此问题.我强烈建议使用LLVM/Clang进行Obj-C Blocks的任何进一步工作.它的C++支持目前非常好,特别是对C++ 03的支持.
| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |