gpt4 book ai didi

c++ - 错误 : cannot convert ‘int (^)(int)’ to ‘R (^)(T)’ in initialization

转载 作者:太空狗 更新时间:2023-10-29 20:30:03 26 4
gpt4 key购买 nike

我正在尝试了解如何在我的模板类中最好地利用 block 。我有以下代码片段:

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 会接受该程序。

最佳答案

这是 GCC 中的一个问题。我在 LLVM 3 下测试了你的程序,它编译得很好。

GCC 4.2 的 block 实现中存在许多问题,有时可以通过完全限定 block 声明来解决这些问题 ^int(int arg){return 1 + arg;}但在这种情况下,它无法解决此问题。我强烈建议转而使用 LLVM/Clang 来进一步处理 Obj-C block 。现在它对 C++ 的支持非常好,尤其是对 C++03 的支持。

关于c++ - 错误 : cannot convert ‘int (^)(int)’ to ‘R (^)(T)’ in initialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8156184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com