草庐IT

Objective-J

全部标签

C++ 引用类型作为 Objective-C++ 中的实例变量

C++引用类型作为实例变量在Objective-C++中是被禁止的。我该如何解决这个问题? 最佳答案 您不能明智地使用引用作为实例变量,因为无法初始化实例变量并且无法重新设置引用。替代方法可能是简单地使用(可能是智能的)指针。让您更接近C++类行为的另一种可能性是为您的C++成员使用PIMPL样式的成员:structCppImpl{SomeClass&ref;CppImpl(SomeClass&ref):ref(ref){}};@interfaceA:NSObject{CppImpl*pimpl;}-(id)initWithRef:

c++ - C++ 和 Objective C 中的多态性

我是ObjectiveC的新手,我想更清楚地理解protocol的概念。@protocolprotocolName@optional@required@end我可以将@optional部分与virtualfunction和@required部分与C++的purevirtualfunction相关联吗?@protocol是Objective-C创建接口(interface)和抽象类的方式吗? 最佳答案 Is@protocoliswayofObjective-Ctocreateinterfaceandabstractclass?没错。C

c++ - 如何解决出现在 Objective-C++ 而不是 Objective-C 中的链接错误?

我正在将我的AppDelegate文件从.m转换为.mm(Objective-C到Objective-C++),以便我可以访问用Objective-C++编写的第三方库。在Objective-C中,我的应用程序委托(delegate)构建并运行良好。但是当我更改扩展名时,项目构建并且出现链接错误,所有这些都缺少我使用的用C编写的静态库中的符号。这些错误是具有以下格式的经典链接错误:“MyFunction(arguments)”,引用自:-MyAppDelegate.o中的[MyAppDelegatemyMethod]找不到符号所有的问题都在应用委托(delegate)对象中。我知道我已

c++ - 如何在 Objective-C 中包装 C++ 库?

我有一个包含数据结构实现的C++库(仅限.h),我想在我的iPhone应用程序中使用它。首先,我在objective-C++中编写了一个包装器作为一个类,通过组合,它具有C++类的ivar。然后我“不得不”将包装器类扩展名更改为.mm,这看起来不错。但是后来我必须将这个包装的类文件包含到其他几个文件中,所以我也必须更改它们的扩展名(以防止一波编译时错误)。我说的对吗?有没有办法将.mm扩展名“限制”为几个文件?(从而防止名称冲突等)编辑:更多可能有用的信息,我使用LLVM1.5作为编译器(我注意到编译时错误的数量从GCC4.2到LLVM1.5不等,但我不确定这是否意味着什么,因为我没有

c++ - 是否可以在运行时确定指针指向 C++ 类还是指向 Objective-C 类?

问题在主题中。我想编写一些用于安全删除对象的通用模板函数,想知道是否可以使用这样的函数:templatevoidSafeDelete(T*&pVal){if(objc_is_cpp_object(pVal)){deletepVal;pVal=NULL;}else[pValrelease]} 最佳答案 如评论中所述,我建议不要混合使用C++delete和Objective-Crelease。仅出于技术角度,您可以使用以下SFINAE技巧运行时:templatestructvoid_{typedefvoidtype;};template

C++/Objective-C++ - 如何在 NSDictionary 中存储 C++ 变量?

我有一个C++std::vector>类型的变量这是在C++中定义和填充的类(从我的Objective-C++类中调用。)我想将此对象存储在NSDictionary中-或某种等价物。我显然不能简单地添加std::vector>到NSDictionary因为它不是id类型.所以我的问题是:如何实现相同的概念?如何存储std::vector>在各种字典中?我可以将vector对象包装在id中吗?以某种方式输入?即使它不是直接字典,我可以使用另一种方法吗?我还需要它是可变的,这样我就可以在运行时添加键/对象。我看过std::map,但我不确定这是否是我要找的。我也没有发现任何关于它可变的例子

c++ - Qt 中的 Objective-C with Mavericks

我一直在Qt中混合使用Objective-C和C++,没有任何问题;在需要时使用.mm文件。将我的构建机器升级到Mavericks后,我最初注意到缺少框架header,因此安装了XCode命令行工具,解决了这个问题。现在,我在编译Objective-C文件时遇到问题,错误提示框架中的代码。例如:-System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSUserNotification.h:16:44:error:missing','betweenenumeratorsNSUserNotificationAc

iphone - 在 Objective-C 中包装 C++ 库并不是隐藏 C++ 符号

我正在尝试用Objective-C包装一个C++库(用于SybaseUltralite),以便可以将该库导入到MonoTouch中。我创建了一个Objective-C库,并将编译后的C++库包含在这个项目中,libulrt.a。为了编译我的项目,我将路径设置为UserHeaderSearchPath以指向C++头文件所在的目录。然后我不得不将compilesourceas设置为Objective-C++。现在的问题是,虽然包装器库编译正确,但一旦我将它包含在另一个Xcode项目中,我必须再次将compilesourceas设置为Objective-C++否则使用我的包装器库的项目会出现

c++ - 从 C++ 中同一个类的另一个成员函数中调用成员函数,Objective C

考虑以下几点:classA{//datamembersvoidfoo(){bar();//isthispossible?orshouldyousaythis->bar()notethatbarisnotstatic}voidbar(){}}//endofclassA如何从另一个内部调用成员函数?静态函数如何影响“this”的使用。应该在对象上调用函数吗? 最佳答案 Nawaz是正确的:'this'是隐含的。一个异常(exception)是如果foo是静态函数,因为在静态函数中没有“this”。在那种情况下,您不能使用bar()除非b

iphone - 在 C++ iPhone 游戏中使用 Objective-C 游戏引擎?

您经常听说对于游戏而言,C++比Objective-C更可取,尤其是在像iPhone这样的资源受限环境中。(我知道你仍然需要一些Objective-C来最初与iPhone服务对话。)然而,现在选择的2D游戏引擎似乎是Cocos2d,它是Objective-C。我知道Apple所谓的“Objective-C++”允许您在单个文件中混合使用C++和Objective-C类,但您不能在同一类或函数中混合和匹配两种语言的结构。那么,将Cocos2d用于C++游戏是否明智/可能?您是否必须编写大量“胶水”代码?我想避免直接OpenGL-ES方法所需的一些繁重工作。 最