Lista i Lambda Expressions

0

Witam!

Piszę w Visualu w zarządzanym C++. Mam sobie listę intów:

using namepsace System::Collections::Generic;
.
.
.
List<int>^ numbers;

Teraz chciałbym wyszukać jakiś konkretny int, i zwrócić jego indeks na liście. Wiem że w C# spokojnie zrobiłbym to lambdą, w ten sposób:

List<int> numbers;

int szukanyInt = 1234567890;
int index = numbers.IndexOf(numbers.Find(i => i == szukanyInt));

Jednak podobna rzecz w C++ nie przechodzi:

List<int>^ numbers;

int szukanyInt = 1234567890;
int index = numbers->IndexOf(numbers->Find(i => i == szukanyInt));

Kompilator najpierw twierdzi, że nie wie co to jest i, jak zmieniłem na int i => i == szukanyInt to otrzymałem parę błędów świadczących o tym, że tego int nie powinno tam być. Więc zastanawiam się, w jaki sposó mogę użyć tutaj lambda expressions?...

Szukałem trochę po sieci na temat tego ale same bzdury znalazłem. Nic przydatnego :/

0

PS2:

Napisałem taki mały właśnie kod w C#, i popatrzyłem w Reflectorze, jak to będzie wyglądać w C++/CLI. Otrzymałem coś takiego:

List<int> ^ indexes = gcnew List<int>();
    for (int i = 0; (i < 10); i++)
    {
        indexes->Add((9 - i));
    }
    int aaa = indexes->IndexOf(indexes->Find(delegate (int a) {
        return (a == 7);
    }));

Jednakże wali mi to masą błędów. Przede wszystkim C++ zdaje się nie rozumieć co to jest delegat, w konsekwencji potem czepia się wszystkich nawiasów, klamerek i tego że nie wie co to jest a... :<

1

W C++ nie ma lambd. Pojawią się one dopiero w C++0x i ich użycie wygląda następująco (o ile czegoś nie pomieszałem):

int index = numbers->IndexOf(numbers->Find([=](int i){ i == szukanyInt}));

Jednak nie wiem czy taka konstrukcja przejdzie przez CL'a. Najlepiej było by zrobić dodatkową funkcję.

1

Visual C++ 2010 co prawda obsługuje lambdy te z C++0x, ale nie obsługuje .Netowych. Więc niestety nie można ich użyć jako parametrów funkcji tam gdzie framework spodziewa się lambd zgodnych z C#.

0

ojojoj. To niedobrze :( będę musiał na piechotę robić Find'a. Dzięki. Temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1