您的位置:首页 > 编程语言 > C语言/C++

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

2016-07-01 11:07 337 查看
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; }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: