动态确定C中函数参数的类型?

问题描述 投票:0回答:1

在JavaScript中,我可以使用带有无类型参数的函数,然后根据类型自定义行为:

function customize(a) {
  if (a instanceof Uint8Array) {
    doArray()
  } else if (typeof a == 'function') {
    doFunction()
  } else {
    doOther()
  }
}

我如何在C中使用或不使用宏(最好不使用宏)做同样的事情。

void
customize(void *a) {
  // ???
}

Here它说:

您的void指针会释放其所有类型信息,因此仅凭这一点,您就无法检查是否可以安全地强制转换它。由程序员决定是否可以将void *安全地转换为类型。

我可以通过某种方式与应用程序中的关键功能或结构进行比较,以查看是否匹配吗?

void
customize(void *a) {
  if (a == fn_a) return do_function();
  if (a == fn_b) return do_function();
  // somehow iterate dynamically through the functions.
}

void
fn_a() {

}
c function pointers casting void-pointers
1个回答
0
投票

//以某种方式动态地遍历函数。

不确定C ++中是否有某些与您的JavaScript样式完全匹配的东西。

但是,如果某些事情是动态的,并且您想确定类型,那听起来就像dynamic_cast可以做的事情。

[对于典型/无聊的示例,Shape是抽象类,CircleTriangle是从Shape派生的类。然后可以这样,

Shape *p_shape;

...

if( Circle *p = dynamic_cast<Circle *>(p_shape) )
{
     // p is a Circle instance
     // do something with Circle
}
else if( Triangle *p = dynamic_cast<Triangle *>(p_shape) )
{
     // do something with Triangle
}
© www.soinside.com 2019 - 2024. All rights reserved.