Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++ / STL] Inicjalizacja referencji na element vectora wyrażeniem lambda

Ostatnio zmodyfikowano 2016-04-15 18:04
Autor Wiadomość
Gibas11
Temat założony przez niniejszego użytkownika
[C++ / STL] Inicjalizacja referencji na element vectora wyrażeniem lambda
» 2016-04-15 17:44:47
Jak w tytule, wprawdzie błąd rozwiązałem inaczej (i lepiej) iteratorami, ale ciekawi mnie dlaczego nie działa.

C/C++
item & currentPlayer =
([]( std::vector < item > & vect )->item &
{
    for( item & i: vect )
    if( i.first == "___________" )
         return i;
   
} );

invalid initialization of non-const reference of type ‘item&’ from an rvalue of type ‘records(sf::RenderWindow&, uint16_t, sf::Font&)::<lambda(std::vector<std::pair<std::__cxx11::basic_string<char>, short unsigned int> >&)>’

Ps. log obciąłem o kawałki "aka...", item to po prostu para stringa i uint16_t.
P-147306
Gibas11
Temat założony przez niniejszego użytkownika
» 2016-04-15 17:57:36
Ok, strasznie głupi błąd, zapomniałem o przekazaniu parametrów. *facepalm*

C/C++
item & currentPlayer =
[]( std::vector < item > & vect )->item &
{
    for( item & i: vect )
    if( i.first == "___________" )
         return i;
   
}( sorted ); //sorted to mój vector z danymi
P-147307
Kaikso
» 2016-04-15 18:00:33
Yyyyy, może poczytaj trochę o wyrażeniach lambda.

C/C++
item & currentPlayer =
[]( std::vector < item > & vect )->item &
{
    for( item & i: vect )
    if( i.first == "___________" )
         return i;
   
}( /* tu podajesz argument(y) jak do zwykłej funkcji */ );

Możesz też zrobić tak:
C/C++
item & currentPlayer =
[ & /* teraz możesz korzystać ze wszystkiego co znajduje się w funkcji macierzystej */ ]()->item &
{
    for( item & i: vect )
    if( i.first == "___________" )
         return i;
   
}();

No i zamiast
std::vector < std::pait < T1, T2 > >
 nie lepiej użyć
std::map < T1, T2 >
?
P-147308
Gibas11
Temat założony przez niniejszego użytkownika
» 2016-04-15 18:04:07
Czytać czytałem, zwykła programistyczna „literówka”. ;-)
No... to chyba zamykam.
EDIT: A mapy nie mogłem użyć z innych powodów. :<
P-147309
« 1 »
  Strona 1 z 1