在ObjyE-C实例中隐式封装C++功能 是否有一个C++对象与一个Objul-C包装器代理,而不必在Objc端实现CPP对象的所有属性和方法?我所寻找的是更通用的东西,我相信它对每个对象都适用 MyObjCWrapper *obj = [[MyObjCWrapper alloc] initWithCppObj: myCppObj]; [MyObjCWrapper aCppObjMethod ]; //calling a method not explicitly defined in the ObjCWarapper

在ObjyE-C实例中隐式封装C++功能 是否有一个C++对象与一个Objul-C包装器代理,而不必在Objc端实现CPP对象的所有属性和方法?我所寻找的是更通用的东西,我相信它对每个对象都适用 MyObjCWrapper *obj = [[MyObjCWrapper alloc] initWithCppObj: myCppObj]; [MyObjCWrapper aCppObjMethod ]; //calling a method not explicitly defined in the ObjCWarapper,c++,objective-c,C++,Objective C,继承是不可能的。从C++类继承是不可能的。 一种特定的方法是使用反射,但它不一定是最快的方法。还有什么?代表团虽然我知道一般原理,但我对它不太熟悉 最好的方法是使用JavaScript中的原型机制。这样,人们就可以简单地将C++实例附加到Objtovi-C原型上,但是这样行吗?我认为重载[]操作符以及为原型提供适当的自上下文都会有问题 那我能做什么呢?不,这是不可能的 是Objul-C非常动态,而C++更像是静态语言。虽然您可以调用尚未定义的Objective-C方法,甚至可以在运行时截取该调用

继承是不可能的。从C++类继承是不可能的。 一种特定的方法是使用反射,但它不一定是最快的方法。还有什么?代表团虽然我知道一般原理,但我对它不太熟悉

最好的方法是使用JavaScript中的原型机制。这样,人们就可以简单地将C++实例附加到Objtovi-C原型上,但是这样行吗?我认为重载[]操作符以及为原型提供适当的自上下文都会有问题


那我能做什么呢?

不,这是不可能的

是Objul-C非常动态,而C++更像是静态语言。虽然您可以调用尚未定义的Objective-C方法,甚至可以在运行时截取该调用,以处理通常针对将调用转发到其他地方的代理对象所做的调用,但有关调用内容的信息更像一个字符串,从技术上讲不是字符串,而是与方法名称类似。除非运行列表中有一个列表,否则无法在运行时将此解析为C++方法调用。这甚至没有考虑参数

此外,你不能希望用宏来隐藏这个,因为Objto-C语法实际上不是“宏兼容”:在某种程度上,你可以用宏调用来替换函数调用,尝试添加额外的隐藏参数或类似的东西,尽管C++中不适用于方法…但是不能对Objective-C调用执行此操作,因为它的语法完全不同


<>编辑:不可能,除非你编写一个合适的预处理器来读取C++并创建合适的Objto-C代码。当然,这总是可能的。但是,C++也不是地球上最平凡的语言。很多工作都是这样。

我能问一下为什么你需要在ObjtoE-C对象中包装C++对象而不是直接使用C++对象?我使用一个生成元语言的生成器C++脚本生成器。我需要用Objective-C做可可粉。我在计划是否可能,用我的Meta Algon来扩展和与可可组件交互?技术上,我不应该触摸低水平,因为我的元语言为我生产C++。想想看,在这两种语言之间,在这两种语言中,无论哪种方向的包装都是一个很好的设计——通常,你只需在C++内附上提供更高级别或最小的抽象,其中大部分工作都是在C++中开始的时候发生的。我可以重载[]操作符,在cpp实例上应用一些反射魔法,并确定其上是否存在这样的方法。如果它只是传递参数列表,如果不是,抛出methodNotFoundException或其他