其他分享
首页 > 其他分享> > c – 错误:初始化时无法将’int(^)(int)’转换为’R(^)(T)’

c – 错误:初始化时无法将’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会接受该程序.

解决方法:

这是海湾合作委员会的一个问题.我在LLVM 3下测试了你的程序,编译得很好.

在GCC 4.2的块实现中存在许多问题,有时可以通过完全限定块声明来解决这些问题^ int(int arg){return 1 arg;}但是在这种情况下它无法解决这个问题.问题.我强烈建议使用LLVM / Clang进行Obj-C Blocks的任何进一步工作.它的C支持现在非常好,特别是对于C 03的支持.

标签:c,macos,gcc,objective-c-blocks
来源: https://codeday.me/bug/20190826/1732474.html