在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 ++中是否有某些与您的JavaScript样式完全匹配的东西。
但是,如果某些事情是动态的,并且您想确定类型,那听起来就像dynamic_cast可以做的事情。
[对于典型/无聊的示例,Shape
是抽象类,Circle
和Triangle
是从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
}