使用Action< PointerClass *比;作为论据
本文关键字:Action PointerClass 使用 | 更新日期: 2023-09-27 18:05:32
我正在创建一个实现图像处理的性能关键型应用程序。我用一些像素指针用我的结构体Pixel
做一些处理。我有很多遍历整个位图数据的代码部分,为了代码可重用性和模块化,我正在设计一种方法,它将采取一个操作并将其应用于图像的所有像素(如地图函数)。然而,当我写Action<Pixel*>
时,Visual Studio抱怨代码说类型Pixel*
可能不能用作类型参数。整个类是在unsafe
上下文中,我使用Pixel
指针无处不在,但我只是不能使用像素指针作为一个动作的模板类。
我可以使用Action<IntPtr>
,但我需要在每次迭代中将其转换为方法体内部的适当指针,这将扼杀"性能关键"的整个想法。
似乎没有什么是强迫你使用Action<T>
,所以你可以创建自己的委托类型。我没有找到一种通用的方式来做到这一点,但这是有效的:
unsafe delegate void PixelAction(Pixel* ptr);
请记住,如果这真的是性能关键,调用委托比直接调用方法要慢。也许另一种方法会更好,比如复制代码(如果在您的情况下可以工作的话),或者在编译时或运行时使用反射生成代码。Emit或CodeDOM.
指针类型不是类,因此不能用作泛型类型参数。
我认为您唯一的方法是定义Action
编辑:原来下面不工作(CS0208)
或者使用Action
delegate void PointerAction<T>(T* ptr);