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

Dyskusja na temat zmiennej globalnej i singletona

Ostatnio zmodyfikowano 2015-06-10 14:40
Autor Wiadomość
jankustosz
Temat założony przez niniejszego użytkownika
» 2015-06-08 22:33:55
zobaczyłem na to http://cpp0x.pl/kursy/Wzorce-projektowe/Wzorce-kreacyjne/singleton/161
Z tego zrozumiałem to singleton stosuje się gdy wystarczy tylko jeden objekt klasy. Zrobiono więc funkcję zwracającą statyczny objekt samej siebie.
Ale co to ma wspólnego z moimi zmiennymi globalnymi. Chcę uniwersalnie opakować WinApi w klasy a nie robić dla każdej kontrolki specjalnego geta który ją zwraca.
P-133358
pekfos
» 2015-06-08 22:51:47
Chcę uniwersalnie opakować WinApi w klasy
Nie masz pojęcia, o czym mówisz.

Z tego zrozumiałem to singleton stosuje się gdy wystarczy tylko jeden objekt klasy.
Gdy może być tylko jeden obiekt klasy. W całe te zmienne globalne wlazłeś tylko dlatego, że musisz działać na jednej procedurze okna.

a nie robić dla każdej kontrolki specjalnego geta który ją zwraca.
Więc nie upieraj się przy jednej konstrukcji jaką znasz. Skoro chcesz uniwersalnie, to zastanów się, po co w ogóle są ci potrzebne te zmienne i ich nazwy. Jeśli możesz działać na nienazwanych, bliżej nieznanych obiektach, to jest to bardziej uniwersalne rozwiązanie, bo wystarczy ci znać adresy obiektów, a te mogą być sobie utworzone gdziekolwiek. Nie zapominaj, co cię ogranicza..
P-133359
jankustosz
Temat założony przez niniejszego użytkownika
» 2015-06-08 23:23:19
To ty byś zrobił coś w rodzaju GetElement(int id) czy jak?
P-133361
pekfos
» 2015-06-08 23:38:00
Po co chcesz pobierać kontrolki? Dla kompletności, taki mechanizm nie zaszkodzi, ale w normalnych warunkach raczej ma się dostęp do obiektów kontrolek, bo nie powinny być wbite w klasę okna.
P-133362
jankustosz
Temat założony przez niniejszego użytkownika
» 2015-06-09 16:22:09
To w takim razie jak byś uniknął zmiennych globalnych. Są tylko dwie może trzy możliwości aby WndProc miała dostęp do objektów.
1) Zmienna globalna.
2) Nadawanie kontrolką identyfikatory i zrobienie funkcji która zwraca kontrolkę o danym id.
3) Zamiast robić zmienne globalne można zrobić globalny vector wskaźników i w main do niego zapisywać co chcemy.

Skoro piszesz że każda z tych opcji jest zła to ty napisz swój pomysł.
P-133378
Monika90
» 2015-06-09 16:52:03
Te trzy sposoby to jest naprawdę jeden sposób.

A WinAPI ma funkcje Get/SetWindowLongPtr i parametr GWLP_USERDATA. Można z tego skorzystać, by przekazać coś (np. wskaźnik this) do procedury okna.

PS. W słowie obiekty nie ma litery j.
P-133380
jankustosz
Temat założony przez niniejszego użytkownika
» 2015-06-09 17:03:52
To w main użyć SetWindowLongPtr a w procedurze okna jak to się profesjonalnie nazywa użyć GetWindowLongPtr, tak?
P-133381
Monika90
» 2015-06-09 17:38:18
Tak. Możesz wywołać SetWindowLongPtr po CreateWindowEx, a w procedurze okna GetWindowLongPtr i  sprawdzasz czy nie zwróciło NULL. To wprawdzie oznacza, że nie będziesz miał dostępu do GWLP_USERDATA przy obsłudze pierwszych kilku komunikatów, ale to nie powinno Ci przeszkadzać.
P-133382
1 « 2 » 3 4
Poprzednia strona Strona 2 z 4 Następna strona