C++/Cli 中Linq 的替代实现, 不干净

C++11中lamda表达式由编译器编译为函数对象, 即 是一个对象, 而C#中的lamda表达式解释为delegate, 即函数指针, 故不能通用.

如果要在C++/Cli中使用 类似 C# 中的 .Select<TSource, TResult> 只能gcnew delegate

ListView ^ listView = gcnew ListView;

ListViewItem ^ item1 = gcnew ListViewItem; item->Tag = System::IntPtr(pFoo1);

ListViewItem ^ item2 = gcnew ListViewItem; item->Tag = System::IntPtr(pFoo2);

... ...

要得到 IEnumable<System::IntPtr> :

IEnumable<System::IntPtr> ^ ptrList = 

System::Linq::Enumerable::Select<ListViewItem^, System::IntPtr>(

System::Linq::Enumerable::Cast<ListViewItem ^>(listView1->SelectedItems), 

gcnew System::Func<ListViewItem^, System::IntPtr>(toIntPtr);


需要额外定义函数

System::IntPtr toIntPtr(ListViewItem ^ item) { return (System::IntPtr)item->Tag; }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值