【发布时间】:2020-12-20 14:23:27
【问题描述】:
我想使用 c 实现行进立方体算法。该算法从体积创建表面。有时该函数会接收一个描述体积的粒子数组,有时它会接收一个标量场函数(一个接收某个位置并返回某个值的函数)。我不希望创建两个单独的函数,而是希望行进立方体函数接收一个 void 指针。如果所需的方法是粒子的表面,它将指针转换为粒子数组,否则将其转换为函数指针。这是我想要的插图:
particle_array* global_par_array;
double (*global_scalar_field)(location);
double value_according_to_par_array(location loc){
//use the global_par_array and return a value
return value;
}
double value_according_to_scalar_field(location loc){
//use the global_scalar_field and return a value
return value;
}
void marching_cubes(mesh* surface ,void* par_array_or_function, char is_par_array){
// ^ need this argument to
// be dynamically casted
double (*method)(location loc);
if (is_par_array){
global_par_array = (particle_array*)(*par_array_or_function);
method = value_according_to_par_array;
}
else{
global_scalar_field = (double(*)(location))(*par_array_or_function);
method = value_according_to_scalar_field;
}
//do the marching cubes algorithm according to method, changing *surface
return;
我将在 python 中调用此函数(使用 ctypes),我将在其中跟踪自己,我的意思是,如果我传递了一个强制转换为 void 指针的函数,我将在 is_par_array 参数中传递 0,或者通过1 如果我传递了一个强制转换为 void 指针的粒子数组,这在 c 中是否允许?
【问题讨论】:
-
因此,使用简单的语言,您想通过
void *参数类型传递函数指针或粒子数组,然后根据 @ 的值将该参数转换为正确的类型987654326@是? -
@ryyker 是的,这就是我想做的。
标签: c function-pointers void-pointers