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

Skrócone wywołanie funkcji

Ostatnio zmodyfikowano 2017-01-31 16:53
Autor Wiadomość
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
C/C++
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?
P-157129
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. » Kurs C++ » Poziom XWyrażenia lambda (C++11) lekcja
P-157132
Monika90
» 2017-01-30 19:19:10
C/C++
#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());
P-157133
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:
C/C++
glDeleteShader( vert_shader )( frag_shader );
:>
P-157134
Saran
Temat założony przez niniejszego użytkownika
» 2017-01-30 19:54:03
Hmm... tak w sumie, użyć tego nie potrafię.
P-157136
Monika90
» 2017-01-30 19:57:33
C/C++
auto delete_shaders = make( glDeleteShader );

delete_shaders( vert_shader )( frag_shader );
P-157137
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
C/C++
glDeleteShader( vert_shader );
...
 działa prawidłowo.
P-157138
Monika90
» 2017-01-30 20:27:44
Nie wiem, użyj debugera, pokaż też więcej kodu.
P-157139
« 1 » 2
  Strona 1 z 2 Następna strona