列表和字符串转换

本文关键字:转换 字符串 列表 | 更新日期: 2023-09-27 18:00:53

我需要在C++/CLI中有一个函数,它在C#中的C++本机std::list<std::string>string[]之间进行链接,才能用我的WinForm:实现类似的功能

    ComboBox1.Items.AddRange(installs);

安装string[]

你有主意吗?我该怎么做?没有Intellisense,C++/CLI编程很难。:(

你对此怎么看?

本机C++.cpp

std::list<std::string>* Get_Liste_place_de_marche(void)
{
    list<string>* liste_place_de_marche = new list<string>;
    liste_place_de_marche->push_back("CAC 40");
    liste_place_de_marche->push_back("DAX");
    return liste_place_de_marche;
}

我需要使用顶部的最后一个代码来编码这个函数:

在我的Winform中用C#调用了C++/CLI.cpp

array<System::String^>^ NativeMethod::Get_Liste_place_de_marche(void)
{
    typedef std::list<std::string>::const_iterator iter_t;
    std::list<std::string> const* list = new std::list<std::string>;
    list = ::Get_Liste_place_de_marche();
    array<System::String^>^ ret = gcnew array<System::String^>(list->size());
    int j = 0;
    for (iter_t i = list->begin(); i != list->end(); ++i)
        ret[j++] = gcnew System::String(i->c_str());
    return ret;
}

它应该起作用吗?因为我有很多错误。。。

列表和字符串转换

以下操作应该完成:

array<System::String^>^ ArrayFromList(std::list<std::string> const& list) {
    typedef std::list<std::string>::const_iterator iter_t;
    array<System::String^>^ ret = gcnew array<System::String^>(list.size());
    int j = 0;
    for (iter_t i = list.begin(); i != list.end(); ++i)
        ret[j++] = gcnew System::String(i->c_str());
    return ret;
}

不过,我会尽量保持这一点的一般性。例如,在C++中,通常使用迭代器范围而不是容器。此外,以上仅适用于(零终止(字符串。转换其他对象集合需要非常相似的代码。抽象掉对象转换可能是有意义的。