昨天别人碰到的问题,晚上回来想了一下给出了一个用模板进行类型推导的解决方案。
问题本身需求很清楚,就是需要写一个Util函数,将C++里面的那些模板(template)集合对象自动转换成.NET里面的泛型(Generic)集合对象,比如将vector<int>转化成List<int>^。因为类型(Type)不定,所以用模板来进行转化是不二的选择。问题的难点在于这些集合类还可以是嵌套类型,也就是说集合里面装的还是集合(比如将vector<vector<int> >转化成List<List<int>^>^),甚至还得考虑多层集合嵌套的情况。
- // NativeToManagedTypeApp.cpp : main project file.
- // author: Anders Deng
- // date: 2008/8/29
- #include "stdafx.h"
- #include <vector>
- using namespace System;
- using namespace System::Collections::Generic;
- using namespace std;
- // for method overload
- struct __true__value {};
- struct __false__value{};
- // some classes for type traits
- template<class T>
- struct collection_Type_Traits
- {
- typedef __false__value isCollection;
- typedef T __template__param__type;
- };
- template<typename T>
- struct collection_Type_Traits<std::vector<T> >
- {
- typedef __true__value isCollection;
- typedef T __template__param__type;
- };
- template<class T>
- struct collection_Type_Traits<List<T&