Hello. I am writing a c extension to build a custom function. However, it has many parameter, most of which is to specify the random number distribution. If directly pass all the parameter to the call of c function, the parameter list will become too long… Is there a clever way to deal with this situation?
Thanks!
I think passing a struct from python to c should be a method.
I try the code:
int affine_crop_forward_cuda(void* ttin){
struct teststruct *tt = (struct teststruct*)ttin;
printf("hello\n");
printf("first:\t%f\nsecond:\t%f\nthird:\t%cforth:\t%c\n", tt->mean, tt->variance, tt->flag_set, tt->flag_uniform);
return 1;
}
and
class teststruct(ctypes.Structure):
_fields_ = [
("mean", ctypes.c_float),
("variance", ctypes.c_float),
("flag_set", ctypes.c_ubyte),
("flag_uniform",ctypes.c_ubyte),
]
class AffineCropFunction(Function):
def __init__(self, mean, variance, flag_set, flag_uniform):
super(AffineCropFunction, self).__init__()
self.tt = teststruct()
self.tt.mean = ctypes.c_float(mean)
self.tt.variance = ctypes.c_float(variance)
self.tt.flag_set = ctypes.c_ubyte(flag_set)
self.tt.flag_uniform = ctypes.c_ubyte(flag_uniform)
affine_crop.affine_crop_forward_cuda(ctypes.c_void_p(ctypes.addressof(self.tt)))
however when invoke the c extension, there is a error TypeError: initializer for ctype 'void *' must be a cdata pointer, not c_void_p
.
I try a lot and search online, can’t find what is the right way to pass the pointer in python code.
Can anyone help me out? Thanks.