McAffey Temat założony przez niniejszego użytkownika |
Pominięcie referowanego argumentu » 2012-10-06 20:11:21 Witam. W grze korzystam z funkcji : void al_unmap_rgba_f( ALLEGRO_COLOR color, float * r, float * g, float * b, float * a ) ale potrzebuję pobrać tylko jedną wartość - przezroczystość. Obecnie robię tak : float r, alpha; al_unmap_rgba_f( kolor, & r, & r, & r, & alpha ); jednak jestem ciekaw (a trudno jest mi określić temat w wyszukiwarce) czy można jakoś "pominąć" te argumenty (tzn żeby np. przypisywało wartość gdzieś, gdzie bym to tracił). Wydaje mi się, że nie da się takiego efektu uzyskać a to co robię jest najlepszym rozwiązaniem (tzn jeszcze później zwalniam pamięć), jednak doszedłem do wniosku, że nic nie stoi na przeszkodzie aby upewnić się bardziej doświadczonych programistów. Problem zobrazuję błędnym pseudo-kodem : al_unmap_rgba_f( kolor, 0, 0, 0, & alpha ); Jeśli ktoś wie czy jest jakiś sposób aby to zrealizować, lub wie na pewno że takiego sposobu nie ma, będę wdzięczny za posta. Pozdrawiam |
|
cyklopek11 |
» 2012-10-06 20:17:57 al_unmap_rgba_f( kolor, 0, 0, 0, & alpha );
Jeśli funkcja używa (a na pewno używa) wewnątrz ciała adresów r, g, b to nie możesz przesyłać 0 zamiast adresów (wskaźnika NULL) bo gdy funkcja odwoła się do zmiennych pokazywanych tymi wskaźnikami to program się scrashuje ze względu na błąd dostępu do pamięci. Ale Tobie chyba chodzi o argumenty domniemane funkcji. |
|
jankowalski25 |
» 2012-10-06 20:18:38 czy można jakoś "pominąć" te argumenty |
Przeciążanie funkcji i argumenty domyślne. Tworzysz własną funkcję z własnymi argumentami (możesz wstawić ją jako inline), w której wywołujesz funkcję al_unmap_rgba_f(). |
|
McAffey Temat założony przez niniejszego użytkownika |
» 2012-10-06 20:24:26 Jeśli funkcja używa (a na pewno używa) wewnątrz ciała adresów r, g, b to nie możesz przesyłać 0 zamiast adresów (wskaźnika NULL) bo gdy funkcja odwoła się do zmiennych pokazywanych tymi wskaźnikami to program się scrashuje ze względu na błąd dostępu do pamięc |
To wiem :) Ale Tobie chyba chodzi o argumenty domniemane funkcji. |
Nie, nie chodzi mi o argumenty domniemane funkcji :) Przeciążanie funkcji i argumenty domyślne. Tworzysz własną funkcję z własnymi argumentami (możesz wstawić ją jako inline), w której wywołujesz funkcję al_unmap_rgba_f(). |
Rzeczywiście jest to jakieś rozwiązanie, nie wpadłem na to. Jednak stosunek czasu poświęconego na realizację, do ułatwienia które sobie tym sprawię, wygląda mizernie, więc chyba sobie podaruję. |
|
cyklopek11 |
» 2012-10-06 20:29:31 Ja bym to zrobił tak: deklaracja: void al_unmap_rgba_f( ALLEGRO_COLOR color, float * a, float * r = NULL, float * g = NULL, float * b = NULL );
definicja: void al_unmap_rgba_f( ALLEGRO_COLOR color, float * a, float * r, float * g, float * b ) { ... if(( r == NULL ) &&( g == NULL ) &&( b == NULL ) ) { } else { } ... }
wywołanie w main(): float alpha = 255; al_unmap_rgba_f( kolor, & alpha, 0, 0, 0 );
No to pozostaje tylko napisanie własnej wersji. |
|
McAffey Temat założony przez niniejszego użytkownika |
» 2012-10-06 20:33:46 @UP No tak, tylko że nie ja jestem autorem funkcji al_unmap_rgba_f tylko twórcy allegro 5, ja tylko z niej korzystam. W tym przypadku mogę "problem" obejść i zrobić sobie funkcję zwracającą samą alfę korzystającą z funkcji al_unmap_rgba_f, ale to nie zaspokaja mojej ciekawości, kierującej mnie do stworzenia tego tematu. |
|
« 1 » |