首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++/CLI中将std::vector<>::iterator转换为.NET接口

在C++/CLI中将std::vector<>::iterator转换为.NET接口
EN

Stack Overflow用户
提问于 2008-09-17 16:28:44
回答 2查看 7K关注 0票数 5

我正在包装一个本机C++类,它有以下方法:

代码语言:javascript
复制
class Native
{
    public:
    class Local
    {
        std::string m_Str;
        int m_Int;
    };

    typedef std::vector<Local> LocalVec;
    typedef LocalVec::iterator LocalIter;

    LocalIter BeginLocals();
    LocalIter EndLocals();

    private:
        LocalVec m_Locals;
};

1)表示这种接口的".NET方式“是什么?返回array<>的单一方法?array<>泛型是否有迭代器,以便实现BeginLocals()和EndLocals()?

( 2)是否应在包装器中将本地值声明为结构

我真的很想用.NET的风格来表示包装的类,但是我对管理世界非常陌生,而且这种类型的信息让谷歌感到沮丧。

EN

Stack Overflow用户

回答已采纳

发布于 2008-09-17 17:03:41

迭代器不能完全翻译为“.net way",但它们大致由IEnumerable 和IEnumerator 代替。

而不是

代码语言:javascript
复制
  vector<int> a_vector;
  vector<int>::iterator a_iterator;
  for(int i= 0; i < 100; i++)
  {
    a_vector.push_back(i);
  }

  int total = 0;
  a_iterator = a_vector.begin();
  while( a_iterator != a_vector.end() ) {
    total += *a_iterator;
    a_iterator++;
  }

您将看到(在c#中)

代码语言:javascript
复制
List<int> a_list = new List<int>();
for(int i=0; i < 100; i++)
{
  a_list.Add(i);
}
int total = 0;
foreach( int item in a_list)
{
  total += item;
}

或者更显式地(而不将IEnumerator隐藏在foreach语法糖后面):

代码语言:javascript
复制
List<int> a_list = new List<int>();
for (int i = 0; i < 100; i++)
{
    a_list.Add(i);
}
int total = 0;
IEnumerator<int> a_enumerator = a_list.GetEnumerator();
while (a_enumerator.MoveNext())
{
    total += a_enumerator.Current;
}

如您所见,foreach只是为您隐藏.net枚举数。

因此,真正的".net方式“将是简单地允许人们为自己创建List<本地>项。如果您确实希望控制迭代或使集合更自定义,那么让您的集合实现IEnumerable< T>和/或ICollection< T>接口。

几乎可以直接翻译到c#,就像您所设想的那样:

代码语言:javascript
复制
public class Native
{
  public class Local
  { 
     public string m_str;
     public int m_int;
  }

  private List<Local> m_Locals = new List<Local>();

  public List<Local> Locals
  {
    get{ return m_Locals;}
  }
}

这样,用户就能够

代码语言:javascript
复制
foreach( Local item in someNative.Locals)  
{
 ... 
}
票数 5
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/85033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档