Saran Temat założony przez niniejszego użytkownika |
Skrócone wywołanie funkcji » 2017-01-30 18:51:53 Jest może jakaś nowość w c++11 pozwalająca na wywołanie funkcji typu: foo( int, string )( int2, string2 ); zamiast foo( int, string ); foo( int2, string2 ); dzięki czemu zamiast wywoływania dwa razy tej samej funkcji, wywołamy ją dwa razy w jednej linijce? |
|
jankowalski25 |
» 2017-01-30 18:58:44 Pokaż kod, który chcesz uprościć. Strzelam: 1. Zwykła pętla for, w której wywołasz funkcję ileśtam razy. 2. Oprócz pętli wskaźnik na funkcję, który będziesz zmieniał i wywoływał różne funkcje z tymi samymi parametrami i wartością zwracaną tego samego typu. 3. Wyrażenia lambda (C++11) |
|
Monika90 |
» 2017-01-30 19:19:10 #include <iostream> #include <utility>
void f( int x, int y, int z ) { std::cout << x << y << z; }
template < class Func > struct G { Func f; template < class...Args > G < Func >& operator ()( Args &&...args ) { f( std::forward < Args >( args )...); return * this; } };
template < class Func > auto make( Func f ) { return G < Func > { f }; }
int main() { auto g = make( f ); g( 1, 2, 3 )( 4, 5, 6 )( 7, 8, 9 ); }
Wstępują tu nazwy takie ja G oraz make, ponieważ niełatwo jest wymyślić dobre nazwy dla czegoś takiego... Należy też mieć na uwadze że kolejność wartościowania argumentów jest nieokreślona, więc np. f(h()); f(h()); niekoniecznie ma taki sam efekt co g(h())(h()); |
|
Saran Temat założony przez niniejszego użytkownika |
» 2017-01-30 19:44:10 No nieźle, dzięki. Zaskoczyłaś mnie. @jankowalski25 Jeśli chodzi o kod: glDeleteShader( vert_shader )( frag_shader );
:> |
|
Saran Temat założony przez niniejszego użytkownika |
» 2017-01-30 19:54:03 Hmm... tak w sumie, użyć tego nie potrafię. |
|
Monika90 |
» 2017-01-30 19:57:33 auto delete_shaders = make( glDeleteShader );
delete_shaders( vert_shader )( frag_shader );
|
|
Saran Temat założony przez niniejszego użytkownika |
» 2017-01-30 20:08:42 Ah, zmyliły mnie te f'y, dzięki. Kiedy zamieniam wywołanie na delete_shaders( vert_shader )( frag_shader ); program przestaje działać, czemu tak się dzieje? Z normalnym glDeleteShader( vert_shader ); ... działa prawidłowo. |
|
Monika90 |
» 2017-01-30 20:27:44 Nie wiem, użyj debugera, pokaż też więcej kodu. |
|
« 1 » 2 |