C++ 错误:无法转换‘;国际(二)(国际)和"x2019 ;;至‘;(二)(T)及"x2019 ;;在初始化中
我试图了解如何在模板类中最好地利用块。 我有以下代码片段:C++ 错误:无法转换‘;国际(二)(国际)和"x2019 ;;至‘;(二)(T)及"x2019 ;;在初始化中,c++,macos,gcc,objective-c-blocks,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; }
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;
});
}
我错过了什么明显的东西吗?我是否在尝试做一些不被允许的事情?如果我在没有模板的情况下做同样的事情,GCC会接受该程序。这是GCC中的一个问题。我在LLVM3下测试了你的程序,它编译得很好
GCC4.2的块实现中存在许多问题,有时可以通过完全限定块声明
^int(int arg){return 1+arg;}
来解决这些问题,但在这种情况下,它无法解决此问题。我强烈建议在Obj-C块的任何进一步工作中使用LLVM/Clang。它的C++支持非常好,尤其是C++ 03的支持。我不知道这是什么,但它不是C++。块是语言扩展,如果这就是你的意思。我删除了C++标签,因为这不是C++。C++中的编译器特定扩展仍然可以被称为C++吗?我不知道。取消了标签移除。GCC的扩展可以用GCC来构建C++项目。谢谢!我知道它是用clang++复制的,我怀疑这是编译器的问题,但我希望能找到一些解决办法。我最终会改用叮当,但其他问题阻碍了我。
error: cannot convert ‘int (^)(int)’ to ‘R (^)(T)’ in initialization