将N层集合对象自动转化为对应的.NET泛型对象(C++)

本文介绍了一个C++模板类型的Util函数,用于将C++的集合对象(如vector)自动转换为.NET的泛型对象(如List)。该函数支持嵌套集合的转换,并通过模板特化处理不同类型。示例展示了从vector<int>到List<int>^以及多层嵌套集合的转换过程。
摘要由CSDN通过智能技术生成

昨天别人碰到的问题,晚上回来想了一下给出了一个用模板进行类型推导的解决方案。

问题本身需求很清楚,就是需要写一个Util函数,将C++里面的那些模板(template)集合对象自动转换成.NET里面的泛型(Generic)集合对象,比如将vector<int>转化成List<int>^。因为类型(Type)不定,所以用模板来进行转化是不二的选择。问题的难点在于这些集合类还可以是嵌套类型,也就是说集合里面装的还是集合(比如将vector<vector<int> >转化成List<List<int>^>^),甚至还得考虑多层集合嵌套的情况。

  1. // NativeToManagedTypeApp.cpp : main project file.
  2. // author: Anders Deng
  3. // date: 2008/8/29
  4. #include "stdafx.h"
  5. #include <vector>
  6. using namespace System;
  7. using namespace System::Collections::Generic;
  8. using namespace std;
  9. // for method overload 
  10. struct __true__value {};
  11. struct __false__value{};
  12. // some classes for type traits
  13. template<class T>
  14. struct collection_Type_Traits
  15. {
  16.     typedef __false__value isCollection;
  17.     typedef T __template__param__type;
  18. };
  19. template<typename T>
  20. struct collection_Type_Traits<std::vector<T> >
  21. {
  22.     typedef __true__value isCollection;
  23.     typedef T __template__param__type;
  24. };
  25. template<class T>
  26. struct collection_Type_Traits<List<T&
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值