Если ваш класс Kernel имеет предсказуемое количество данных члена, тогда вы можете определить dtype для него вместо класса. например если он параметризирован 9 поплавками и int, вы можете сделать
kerneldt = np.dtype([('myintname', np.int32), ('myfloats', np.float64, 9)])
arr = np.empty(dims, dtype=kerneldt)
. Вам придется сделать какое-то принуждение, чтобы превратить их в объекты класса Kernel каждый раз, когда вы хотите манипулировать методами одного ядра но это один из способов хранения фактических данных в массиве NumPy. Если вы хотите сохранить только ссылку, то dtype объекта лучше всего сделать без подкласса ndarray.
Я думаю, что вам нужен протокол, а не CustomFilter
с заводским подходом. Если вам нужен некоторый подкласс GPUImageFilter
, вы можете создать GPUImageFilter<CustomFilter>
//CustomFilter.h
@protocol CustomFilter
...
@end
typedef GPUImageFilter<CustomFilter> CustomFilter;
//PrivateFilter.h
#import "CustomFilter.h"
@interface PrivateFitler: CustomFilter
...
@end
//GPUImageFilter+CustomFilter.h
@interface GPUImageFilter(CustomFilter)
+ (CustomFilter *)filter;
@end
//GPUImageFilter+CustomFilter.m
#import "PrivateFilter.h"
@implementation GPUImageFilter(CustomFilter)
+ (CustomFilter *)filter
{
return [[PrivateFilter alloc] init;
}
@end
При таком подходе Xcode даже выдаст вам предупреждения, если вы забудете реализовать некоторые методы.