功能的可变大小参数

时间:2013-06-08 06:17:29

标签: objective-c c

我想向C函数发送一个任意大小的参数。

现在我正在做:(一个人为的例子)

typedef struct {
  int a;
  float b;
} myStruct;

void foo(int, char)
void bar(int, myStruct)

void* arg;
size_t size = flag ? sizeof(char) : sizeof(myStruct);
void (*fn)(int, ...) = flag ? &foo : &bar;
char data[size];
memcpy(data, arg, size);
fn(42, data);

任何人都知道更简单的方法吗?

更新

我实际上要做的是调整Objective-C属性(类似于KVO的工作方式)。我想使用imp_implementationWithBlock()来创建动态实现,但是我需要一种方法来调用原始实现。 originalIMP(_self,_cmd)一切都很好,除了最后的参数可以是可变大小(即CGRect,任意结构等)。我想做originalImp(_self,_cmd,{struct of size n})。

1 个答案:

答案 0 :(得分:0)

我最终做的是拥有函数将接受的各种数据类型的联合...然后使用关于参数大小的switch语句选择属性类型。