相关疑难解决方法(0)

为面向对象的C++代码开发C包装API

我正在寻找开发一组C API,它们将围绕我们现有的C++ API来访问我们的核心逻辑(用面向对象的C++编写).这基本上是一个粘合API,允许我们的C++逻辑可以被其他语言使用.什么是一些很好的教程,书籍或最佳实践,介绍了围绕面向对象的C++包装C所涉及的概念?

c c++ wrapper

75
推荐指数
4
解决办法
4万
查看次数

从 Swift 访问 C++ 枚举

我正在尝试enum从 Swift访问用 C++ 标头编写的 值。具体来说,我enum在 OpenCV 的 hpp 头文件中有这个,我想将其值公开给 Swift。我试图在 Swift 和 Objective-C 之间设置一个桥接头,并在我想公开的 C++ 枚举值周围放置一个包装器,但编译器对此并不满意:

imgproc.hpp:C++ 头文件

enum ThresholdTypes {
    THRESH_BINARY     = 0,
    THRESH_BINARY_INV = 1,
    THRESH_TRUNC      = 2, 
    ...
};
Run Code Online (Sandbox Code Playgroud)

桥接头

#import "OpenCVWrapper.h"
Run Code Online (Sandbox Code Playgroud)

OpenCVWrapper.h:我的 Objective-C Wrapper 类要暴露给 Swift

#ifdef __cplusplus
#import <opencv2/core.hpp>
#import <opencv2/imgproc.hpp>
#endif

#import <Foundation/Foundation.h>

@interface OpenCVWrapper : NSObject

typedef enum {
    Binary = cv::THRESH_BINARY,  // ERROR: use of undeclared identifier `cv`
    BinaryInv = cv::THRESH_BINARY_INV  // ERROR: use of …
Run Code Online (Sandbox Code Playgroud)

c++ enums objective-c swift bridging-header

5
推荐指数
1
解决办法
1325
查看次数

将C ++代码桥接到我的快速代码中。XCode中哪些基于c语言的文件扩展名是什么?

作为Swift编码器,我对事物c方面的明显碎片感到困惑。不知何故,有Objective-C,Objective-C ++,c和c ++,它们都具有.h,.hpp,.m,.cpp等文件扩展名,但是我找不到关于哪个扩展名指向哪种文件类型的详尽文档。 XCode(尽管我相当确定c ++应该是.hpp和.cpp)。

这种混乱使我陷入困境,在尝试向快速代码公开C ++类时,我对自己的工作一无所知。让我解释一下我的策略。

我有一个由我修改过的XCode自动生成的桥接文件

桥接头

//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//

#include <stdio.h>
#include <stdlib.h>

int* main1() {
    int *num;

    num = (int *)malloc(1000 * sizeof(int));
    for (int i = 0; i < 10; i++) {
        num[i] = i;
    }
    num[10] = 10;
    free(num);
    return num;
}
Run Code Online (Sandbox Code Playgroud)

如果我解释正确,那么XCode会将其视为Objective-C代码的头文件。确实,此功能可以迅速发挥作用并按预期工作。

然后,我创建了另一个文件,因为如果我尝试在该文件中导入我的c ++代码,它将尝试像objective-c一样编译它,但效果不佳。我相信该文件将是此标头的实现,并且我被告知这将是导入我的c ++代码的安全地方。

还有 Bridging-Header.m

#ifndef Bridging_Header_h
#define Bridging_Header_h
#import "Bridging-Header.h"
#import "rectangle.hpp"

int …
Run Code Online (Sandbox Code Playgroud)

c++ xcode objective-c ios swift

2
推荐指数
1
解决办法
1164
查看次数

标签 统计

c++ ×3

objective-c ×2

swift ×2

bridging-header ×1

c ×1

enums ×1

ios ×1

wrapper ×1

xcode ×1