Преобразование списков и строк - PullRequest
3 голосов
/ 29 июня 2011

Мне нужна функция в C ++ / CLI, которая связывает нативные C ++ std::list<std::string> и string[] в C #, чтобы сделать что-то подобное с моей WinForm:

    ComboBox1.Items.AddRange(installs);

устанавливает это string[].

У вас есть идея? Как я могу это сделать? Программирование на C ++ / CLI сложно без Intellisense. (

Что вы думаете об этом?

Родной 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;
}

И мне нужно закодировать эту функцию, используя последний код вверху:

C ++ / CLI .cpp вызывается в моей Winform с C #

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;
}

Это должно работать? Потому что у меня много ошибок ...

1 Ответ

4 голосов
/ 29 июня 2011

Следующее должно делать эту работу:

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 ++ принято работать с диапазонами итераторов вместо контейнеров.Кроме того, вышесказанное работает только с (нулевыми) строками.Очень похожий код понадобится для преобразования других коллекций объектов.Возможно, имеет смысл абстрагироваться от преобразования объекта.

...