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

Pominięcie referowanego argumentu

Ostatnio zmodyfikowano 2012-10-06 20:33
Autor Wiadomość
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 :

C/C++
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
P-66204
cyklopek11
» 2012-10-06 20:17:57
C/C++
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.
P-66206
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().
P-66207
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ę.
P-66210
cyklopek11
» 2012-10-06 20:29:31
Ja bym to zrobił tak:


deklaracja:
C/C++
void al_unmap_rgba_f( ALLEGRO_COLOR color, float * a, float * r = NULL, float * g = NULL, float * b = NULL );

definicja:
C/C++
void al_unmap_rgba_f( ALLEGRO_COLOR color, float * a, float * r, float * g, float * b )
{
   
    ...
   
    if(( r == NULL ) &&( g == NULL ) &&( b == NULL ) )
    {
        // programista leniwy i zastosowal domyslne argumenty
        // pewnie chce pobrac tylko przezroczystosc
    }
    else
    {
        // r, g, b - prawidlowe adresy  moge z nimi dzialac
    }
    ...
   
   
}


wywołanie w main():
C/C++
float alpha = 255;
al_unmap_rgba_f( kolor, & alpha, 0, 0, 0 );

No to pozostaje tylko napisanie własnej wersji.
P-66212
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.
P-66215
« 1 »
  Strona 1 z 1