-1

我想向 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})。

4

1 回答 1

0

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

于 2013-06-10T20:36:17.483 回答