草庐IT

Binding_New_Objective-C_Types

全部标签

c++ - 是否可以从 Objective-C 获得中间 C 代码?

据我正确理解,除了Objective-C语言是“干净”C的严格超集这一事实之外,添加的OOP范例由Objective-CRuntimeReference中部分描述的一组函数模拟。.因此,我期望有可能以某种方式在中间C/C++文件中编译Objective-C代码(可能带有一些asm插入)。一般可以吗? 最佳答案 您可以使用clang重写器转换为C++。虽然不知道去C的方法。重写器可通过“-rewrite-objc”命令行选项使用。 关于c++-是否可以从Objective-C获得中间C代码

c++ - 是否可以创建指向函数的 `new` 运算符/构造函数的函数指针?

如果我想要参数化创建一个对象,我当然可以创建一个在特定类上调用new并传递指针的函数。我想知道是否可以跳过该步骤并将函数指针传递给new运算符本身。 最佳答案 boost::lambda提供functionwrappersfornewanddelete.这些可用于轻松地将new调用转换为函数对象。 关于c++-是否可以创建指向函数的`new`运算符/构造函数的函数指针?,我们在StackOverflow上找到一个类似的问题: https://stackover

c++ - 尽管未定义 <new> header ,但 New 会抛出 bad_alloc?

new是怎么回事?程序中的表达式可以抛出bad_alloc尽管没有#include还是出错(因为这个错误isdefinedintheheader)?来自3.7.4。N3337的:Thelibraryprovidesdefaultdefinitionsfortheglobalallocationanddeallocationfunctions.Someglobalallocationanddeallocationfunctionsarereplaceable(18.6.1).AC++programshallprovideatmostonedefinitionofareplaceablea

C++ 类作为 Objective-C 类的实例变量

我需要混合使用Objective-C和C++。我想将所有C++内容隐藏在一个类中,而将所有其他内容保留为纯Objective-C。问题是我想要一些C++类作为实例变量。这意味着它们必须在头文件中提及,它被其他类包含并且C++开始传播到整个应用程序。到目前为止,我能想到的最佳解决方案如下所示:#ifdef__cplusplus#import"cppheader.h"#endif@interfaceFoo:NSObject{idregularObjectiveCProperty;#ifdef__cplusplusCPPClasscppStuff;#endif}@end这行得通。实现文件有一

c++ - Objective-C 和 C++ 之间的转换比较

好的,所以这可能是一个学术问题。谁能告诉我C++的转换运算符是否/如何转换为Objective-C...或者它们如何/为什么不需要?我已经脱离C++的圈子几年了,似乎每次我转身他们都会添加一些新的关键字。我最近了解到C++的各种转换运算符reinterpret_cast、static_cast、dynamic_cast和const_cast。我不太清楚何时会出现需要使用所有这些类型的强制转换的情况。我现在已经使用Objective-C一两年了,对它感觉相当舒服。(在那之前主要是C人)。我试图理解为什么C++似乎具有所有这些复杂性。或者换句话说,Objective-C缺少什么它似乎没有(

c++ - 使用参数构造函数模拟 new[]

如果我没有修改参数构造函数中的任何static变量,则低于模拟newT[N](x,y);(数组新的参数)?templatevoid*operatornew[](size_tsize,constT&value){T*p=(T*)malloc(size);for(inti=size/sizeof(T)-1;i>=0;i--)memcpy(p+i,&value,sizeof(T));returnp;}用法将是,structA{A(){}//defaultA(inti,intj){}//witharguments};intmain(){A*p=new(A(1,2))A[10];//instea

c++ - 在 C++ 中调用 "new"时出现段错误?

我在尝试调用“new”来创建指针并将其插入vector时遇到了段错误。我将元素推送到vector中的代码是:queue->push_back(newBox(gen_id,Interval(x_mid,x_end),Interval(y_mid-y_halfwidth,y_mid+y_halfwidth)));基本上Box是一个类,构造函数只需要3个参数,generation_id和2个Intervals。我在这个“推”之前和之后打印出了vector中的内容,之前:[-0.30908203125,-0.3087158203125],[-0.951416015625,-0.95104980

c++ - "structural binding"上的提案在哪里?

在下面C++Goingnativevideo,提到了一种称为“结构绑定(bind)”的语言功能。我曾经有过referred将这个概念称为“解构”(javascript背景)。该功能将允许用户捕获多个返回值,而无需使用std::tie或指定类型。示例:std::maptable;auto{cursor,inserted}=table.insert({"hello",0});我在哪里可以找到此提案并跟踪其进度? 最佳答案 您所指的提案是P0144R0:StructuredBindings.post-Konamailing将这篇论文列为进

c++ - C++ 中的 Objective C "autorelease"——控制对象生命周期的标准方法?

我正在将一些代码从ObjectiveC移植到C++。我对C++设计模式的熟悉不如对ObjectiveC的熟悉。在Cocoa世界中,有一种非常常见的模式,即编写返回“自动释放”对象的工厂方法。一些简单的事情:-(MyClass*)load{MyClass*obj=[[MyClassalloc]init];return[objautorelease];}这个简单易懂。该方法拥有它分配的内存,但可以将其交还给调用者,同时放弃所有权。它不必知道或关心调用者对该内存做了什么。如果保留它,该对象将存活。如果完全忽略,内存将在当前调用堆栈展开后的某个时间释放。我在C++中有些惶恐地接近这个,因为它的

c++ - new 的内存是否必须来自 operator new?

在考虑类似的事情时autox=newT;标准是否强制要求内存必须来自operatornew——类特定的还是全局的?也就是说,如果缺少特定于类的operatornew,则没有办法从除全局operatornew之外的任何地方获取内存? 最佳答案 我认为你的理解方式是错误的。表达式newT总是由两个步骤组成:搜索合适的operatornew。如果一个存在于类T中,则采用那个,否则采用全局的。全局的总是存在的,因为这是标准规定的(所以你永远不能“定义”它(因为它已经被定义),但你可以替换它)。你可以说::newT总是无条件地选择全局oper