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; }
如果要在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; }
相关文章推荐
- C++类型转换----const_cast
- C语言练习题每练 2:找出三个字符串中最大的
- c++ 版本url encode 和url decode 代码
- c++ Socket编程步骤
- RVIZ(一):Markers:sending Basic Shapes (C++)
- 适合win10的c语言·编程软件和翻译。
- C++程序设计语言练习11.4 算术运算符重载的类成员函数写法
- 设计模式C++实现(8)——代理模式
- 设计模式C++实现(7)——外观模式、组合模式
- 字符串
- 设计模式C++实现(6)——建造者模式
- C++中 模板Template的使用
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(4)——单例模式
- 【win32】SetDlgItemInt(函数详解)
- 设计模式C++实现(3)——适配器模式
- 设计模式C++实现(2)——策略模式
- Eclipse下C语言的Socket编程(Winsock,gcc)问题总结
- C++函数重载
- C++函数重载