以双向方式混合目标C++和C++
Mixing Objective C++ and C++ in a bi-directional way
假设我有两个目标c++对象,每个对象都包装一个给定的原生c++对象:
A、 B=目标c++对象类型
Acpp,Bcpp=c++对象类型
B.mm
#import "Bcpp.h"
#import "B.h"
@interface B ()
{
Bcpp myBcpp; // declare instance c++ variable of type Bcpp
}
@end
在A.mm 中
#import "Acpp.h"
#import "A.h"
@interface A ()
{
Acpp myAcpp; // declare instance c++ variable of type Acpp
}
@end
@implementation A
// method to return an instance of B from an instance of A (self)
- (B)GetBfromA
{
Bcpp *bfroma = myAcpp.GetBfromA(); // return c++ object
// How do i find the objective C++ object B from its wrapped c++ instance bfroma?
}
@end
这样做的原因是我们有一个成熟的c++数据结构,我们希望用目标c++对象来封装它。这是最好的方法吗?如果是,我们如何解决反向映射问题?
编辑:感谢早期的响应者,但我有一个更棘手的情况,我在上面暗示。假设函数GetBFromA()返回一个已经声明的Bcpp实例(作为B实例的实例变量)。因此,我持有一个指向Bcpp对象的指针,该对象本身就是B类型的目标C++对象的实例变量。我如何从Bcpp的实例中找到B的实例?
您可能需要做的是能够从Bcpp
创建B
。因此,B
需要修改为-initWithBcpp:
方法:
- (id)initWithBcpp:(Bcpp*)bcpp
{
self = [super init];
if (self != nil)
{
myBcpp = *bcpp;
}
return self;
}
然后,在GetBFromA
中,您需要从Bcpp*
:创建一个B
- (B*)GetBfromA
{
Bcpp *bfroma = myAcpp.GetBfromA(); // return c++ object
B* result = [[B alloc] initWithBcpp:bfroma];
return result;
}
相关文章:
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++A*算法并不总是在路径中具有目标节点
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 为测试目标创建具有不同源文件夹的文件
- 使用源向量作为目标
- 是否可以用C++/WinRT将windows 10.0.14393作为目标
- 在 CMake 中为每个目标设置编译器/链接器标志
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 CMake 中对目标依赖项进行分组?
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 如何为包含头文件的目标编写生成文件?
- 线性优化目标函数中的绝对值
- 制作文件:没有规则来制定目标:如何设置正确的规则?
- 字符串函数在目标C++上运行时C++返回空
- 如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL
- 请求最简单的 OpenMP 目标 GPU 示例
- LLVM 编译:目标的配方 '../lib/IR/Release+Asserts/Intrinsics.gen.tmp' failed
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- 我应该如何在没有变量的情况下将相同的参数传递给 CMAKE 中的多个目标?
- CMake 错误 - 目标 foo INTERFACE_SOURCES属性包含在源目录中以前缀为前缀的路径