[C++11]Uniwersalny typ dla wyrażeń lambda (?)
Ostatnio zmodyfikowano 2012-01-19 18:50
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: 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? |
|
DejaVu |
» 2012-01-19 17:16:07 |
|
pekfos Temat założony przez niniejszego użytkownika |
» 2012-01-19 17:29:46 tak. |
|
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 :) |
|
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.. |
|
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 :) |
|
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 :) |
|
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 |
|
« 1 » 2 |