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

[C++11]Uniwersalny typ dla wyrażeń lambda (?)

Ostatnio zmodyfikowano 2012-01-19 18:50
Autor Wiadomość
pekfos
Temat założony przez niniejszego użytkownika
[C++11]Uniwersalny typ dla wyrażeń lambda (?)
» 2012-01-19 17:11:44
Usiłuje przekazać wyrażenie lambda przyjmujące określone argumenty i zwracające określony typ do konstruktora klasy. Aktualnie szukam rozwiązania na takim kodzie:
C/C++
template < class T >
void fun( T t ) {
    t();
}

void fun2( void( * t )() ) {
    t();
}

int main() {
    int t;
    fun([]()->void { } );
    fun([ & ]()->void { t = 2; } ); // :<
    prn;
    fun2([]()->void { } );
    fun2([ & ]()->void { t = 3; } ); //!
    prn;
}
prog.cpp: In function 'int main()':
prog.cpp:19:23: error: cannot convert 'main()::<lambda()>' to 'void (*)()' for argument '1' to 'void fun2(void (*)())'
Jak widać problem pojawia się dopiero wtedy, gdy są domknięcia. Bez nich można to wepchnąć jako funkcję. Jest jakiś uniwersalny sposób?
P-48760
DejaVu
» 2012-01-19 17:16:07
Czytałeś to: » Kurs C++ » Poziom XWyrażenia lambda (C++11) lekcja?
P-48761
pekfos
Temat założony przez niniejszego użytkownika
» 2012-01-19 17:29:46
tak.
P-48767
DejaVu
» 2012-01-19 17:32:00
Gdybyś nie używał wyrażeń lambda to jakbyś napisał funkcję, która spełniłaby Twoje wymagania? Wyrażenia lambda to w końcu nic innego jak funkcje :)
P-48768
pekfos
Temat założony przez niniejszego użytkownika
» 2012-01-19 17:38:18
Napisałbym funktor, który przyjmowałby "domknięcia" w konstruktorze a argumenty w operatorze ().

Docelowo chcę trzymać wyrażenie lambda w klasie. Dla prostszego użycia klasy, te wyrażenie miało być przekazywane przez konstruktor. I tu problem: jako co, trzymać te wyrażenie? Jakbym użył szablonów, jakiś typ musiałbym podać. Z wartości podanej do konstruktora raczej się nie wydedukuje..
P-48770
DejaVu
» 2012-01-19 17:40:15
Tak samo jak trzymasz wskaźnik na funkcję - przykład również w rozdziale, który podałem :)
P-48772
pekfos
Temat założony przez niniejszego użytkownika
» 2012-01-19 17:45:12
Chodzi mi o wyrażenia z domknięciami. W tym rozdziale nie są opisane :)
P-48773
DejaVu
» 2012-01-19 17:57:06
No na temat tych całych domknięć niestety Ci nie pomogę i jedynie mogę odesłać do draftu C++0x, który jeszcze do niedawna można było swobodnie pobrać z Internetu :) Nie wczytywałem się jeszcze w nie :P
P-48775
« 1 » 2
  Strona 1 z 2 Następna strona