Как мы скрываем закрытый класс при использовании его в Objective-C?

Если ваш класс Kernel имеет предсказуемое количество данных члена, тогда вы можете определить dtype для него вместо класса. например если он параметризирован 9 поплавками и int, вы можете сделать

kerneldt = np.dtype([('myintname', np.int32), ('myfloats', np.float64, 9)])
arr = np.empty(dims, dtype=kerneldt)

. Вам придется сделать какое-то принуждение, чтобы превратить их в объекты класса Kernel каждый раз, когда вы хотите манипулировать методами одного ядра но это один из способов хранения фактических данных в массиве NumPy. Если вы хотите сохранить только ссылку, то dtype объекта лучше всего сделать без подкласса ndarray.

0
задан allenlinli 18 January 2019 в 02:35
поделиться

1 ответ

Я думаю, что вам нужен протокол, а не 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 даже выдаст вам предупреждения, если вы забудете реализовать некоторые методы.

0
ответ дан Cy-4AH 18 January 2019 в 02:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: