标签: objective-c++

Objective-C - 使用C++进行桥接的缺点?

所以,今天我很无聊,并决定搞乱C++/Obj-C插值,我找到了一种方法来创建一个非常有趣的设置.

@protocol NSCPPObj <NSObject>

-(id) init;
-(id) initWithInt:(int) value;
-(int) somethingThatReturnsAValue;
-(void) doSomething;

@end

class NSCPPObj : objc_object {
public:    
    static Class cls();

    int iVar;

    NSCPPObj();
    NSCPPObj(int);

    int somethingThatReturnsAValue();
    void doSomething();
};
Run Code Online (Sandbox Code Playgroud)

如您所见,界面非常简单易懂.我们创建两个(几乎)相同的接口,一个用于C++对象,另一个用于Obj-C协议.

现在,我找到了一种方法来实现这一点,但是让自己好斗,这变得丑陋:

// NSCPPObj.mm
#import <objc/runtime.h>
#import <iostream>

#import "NSCPPObject.h"

Class NSCPPObj_class = nil;

__attribute__((constructor))
static void initialize()
{
    NSCPPObj_class = objc_allocateClassPair([NSObject class], "NSCPPObj", 0);

    class_addMethod(NSCPPObj_class->isa, @selector(alloc), imp_implementationWithBlock(^(id self) {
        return class_createInstance(NSCPPObj_class, sizeof(struct NSCPPObj));
    }), "@@:");

    class_addMethod(NSCPPObj_class, @selector(init), imp_implementationWithBlock(^(id self) {
        return self;        
    }), "@@:");

    class_addMethod(NSCPPObj_class, @selector(initWithInt:), imp_implementationWithBlock(^(id …
Run Code Online (Sandbox Code Playgroud)

c++ cocoa objective-c objective-c++ ios

25
推荐指数
1
解决办法
1697
查看次数

如何在NSOpenPanel中将"打开"更改为"选择"?

在我的应用程序中我需要显示选择文件对话框,我正在使用允许选择文件的NSOpenPanel,代码如下所示,

- (IBAction)sendFileButtonAction:(id)sender{

    NSOpenPanel* openDlg = [NSOpenPanel openPanel];

    // Enable the selection of files in the dialog.
    [openDlg setCanChooseFiles:YES];

    // Enable the selection of directories in the dialog.
    [openDlg setCanChooseDirectories:YES];

    // Display the dialog.  If the OK button was pressed,
    // process the files.
    if ( [openDlg runModalForDirectory:nil file:nil] == NSOKButton )
    {
        // Get an array containing the full filenames of all
        // files and directories selected.
        NSArray* files = [openDlg filenames];

        // Loop through all the files and …
Run Code Online (Sandbox Code Playgroud)

macos cocoa objective-c++ nsopenpanel

22
推荐指数
1
解决办法
1万
查看次数

如何在XCode中使用带有Objective-C的C++

我想在Objective-C中使用/重用C++对象.我有一个具有类定义的hello.h和用于类实现的hello.cpp.

class Hello
{ int getX() ... };
Run Code Online (Sandbox Code Playgroud)

我在Objective-C函数中使用这个类.

#include "hello.h"
...
- (IBAction) adderTwo:(id)sender
{
    Hello *hi = new Hello();            
    int value = hi->getX();
    NSLog(@"Hello %d", value);
    [textField setIntValue:value];
Run Code Online (Sandbox Code Playgroud)

当我在Xcode中编译代码时,我收到此错误消息.

class Hello *XXXXX
Users/smcho/Desktop/cocoa/adderTwo/hello.h:9:0
/Users/smcho/Desktop/cocoa/adderTwo/hello.h:9: 
error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Hello'

什么地方出了错?

c++ xcode objective-c objective-c++

21
推荐指数
2
解决办法
2万
查看次数

Objective-C++的缺点?

我正在使用Objective-C++为iOS编写一个大型项目.我主要使用Objective-C作为UI和其他Apple API,使用C++进行内部音频处理和其他信息处理.我想知道自由混合Objective-C和C++的缺点.

当然,混合两个对象模型有其固有的局限性以及混乱和混乱的可能性.我更好奇的是如何使用Objective-C++会影响编译过程,我可能会遇到的语法缺陷,可读性问题以及我如何避免这些,等等.我很想知道你对Objective-C++的体验有什么就像接近这个以及你可能有的提示一样.

c++ coding-style objective-c objective-c++ ios

19
推荐指数
1
解决办法
5029
查看次数

将std:vector转换为NSArray

是否有一个转换的好方法vector<int32_t>NSArrayNSNumber或循环,并增加了NSMutableArray相当多的唯一途径?

c++ vector objective-c++ nsarray

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

在Objective-C++ Cocoa中将RGB数据转换为位图

我有一个RGB unsigned char的缓冲区,我想将其转换为位图文件,有谁知道怎么做?

我的RGB float具有以下格式

R [(0,0)],G [(0,0)],B [(0,0)],R [(0,1)],G [(0,1)],B [(0, 1)],R [(0,2)],G [(0,2)],B [(0,2)] .....

每个数据单元的值范围从0到255.任何人都有任何想法如何进行此转换?

rgb cocoa bitmap objective-c objective-c++

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

将C++对象添加到Objective-C类

我正在尝试混合使用C++和Objective-C,我已经完成了大部分工作,但希望在Objective-C和C++代码之间有一个单独的接口类.因此,我想在ViewController接口中拥有一个持久的C++对象.

禁止使用没有类型的'myCppFile'声明失败:

#import <UIKit/UIKit.h>
#import "GLView.h"
#import "myCppFile.h"

@interface GLViewController : UIViewController <GLViewDelegate>
{
    myCppFile cppobject;
}

@end
Run Code Online (Sandbox Code Playgroud)

但是这在.mm实现文件中运行得很好(它不起作用因为我希望cppobject在调用之间保持不变)

#import "myCppFile.h"
@implementation GLViewController
- (void)drawView:(UIView *)theView
{
    myCppFile cppobject;
    cppobject.draw();
}
Run Code Online (Sandbox Code Playgroud)

c++ iphone objective-c objective-c++

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

类'Foo'的重复接口声明

我正在研究我的程序,似乎设置中的某些内容发生了变化.突然我得到错误"类'Foo'的重复接口声明".它提到了一个重复的头文件,但只有一个副本.

有趣的是,这只发生在调试模式,而不是设备模式.

有谁知道什么可能是错的?

我正在使用Objective-C++和一些静态库.

iphone xcode cocoa-touch objective-c objective-c++

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

在 C++ 类成员函数上使用 #ifdef 保护是否安全?

假设您有以下 C++ 类的定义:

class A {
// Methods
#ifdef X
// Hidden methods in some translation units
#endif
};
Run Code Online (Sandbox Code Playgroud)

这是否违反了班级的一个定义规则?有哪些相关危害?我怀疑如果使用成员函数指针或虚函数,这很可能会中断。否则使用安全吗?

我在 Objective C++ 的上下文中考虑它。头文件包含在纯 C++ 和 Objective C++ 翻译单元中。我的想法是使用 OBJC 宏保护具有 Objective-C 类型的方法。否则,我必须对标头中的所有 Objective-C 类型使用 void 指针,但这样我就失去了强类型,并且必须在整个代码中添加丑陋的静态强制转换。

c++ objective-c conditional-compilation objective-c++ one-definition-rule

18
推荐指数
3
解决办法
1822
查看次数

如何在objective-c ++中编译特定文件,在objective-c中编译项目的其余部分

我目前正在忙于一个项目,我需要使用外部附件来阅读Mifare 1k标签.

附件提供了一个SDK,用(Objective?)C++编写,我按照提供的指令将XCode设置为"Compile sources as:Objective-C++",并在"Other linkers flags"中添加"-Obj-C++".

SDK编译好了,但麻烦的是我已经在项目中使用了几个库(例如ASIHTTPRequest,JSONKit,...),并且因为这些库中的那些新设置而导致编译问题.如果我切换回以前的设置,我会在阅读器的SDK中遇到编译问题

问题是:有没有办法只从SDK中编译类作为C++,而项目的其余部分作为objective-c?

编辑: SDK文件仅包含.h(和链接库)

谢谢你的帮助,迈克

xcode compilation objective-c conditional-compilation objective-c++

17
推荐指数
3
解决办法
2万
查看次数