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

działania na void *

Ostatnio zmodyfikowano 2014-10-29 16:04
Autor Wiadomość
mac104
Temat założony przez niniejszego użytkownika
działania na void *
» 2014-10-28 19:59:41
Mój kompilator pokazał mi że są niemożliwe, tak też czytałem w internecie. Jak mogę w takim razie otrzymać jeden void* o ileś bajtów wyżej lub niżej od drugiego? Próbowałem skonwertować do char* ale też kompilator nie chciał na to pozwolić.
P-119588
pekfos
» 2014-10-28 20:08:14
Po co chcesz to zrobić?

Próbowałem skonwertować do char* ale też kompilator nie chciał na to pozwolić.
Nie ma kodu, nie ma problemu.
P-119589
DejaVu
» 2014-10-28 20:16:46
Wszystko da się zrobić na void*. Trzeba tylko rozumieć co to w ogóle oznacza. W 95% przypadkach widząc w kodzie void* widzę niekompetentnego programistę lub zaszłości historyczne z C. Skoro chcesz tworzyć kod, który używa void* oraz nie jest to wymuszone architekturą istniejących narzędzi to prawdopodobnie masz fatalny styl projektowania aplikacji.

/edit:
Wybacz, że takie mocne słowa na temat void* wypisuję, ale... taka jest prawda. Nie należy powielać złych rozwiązań historycznych, bo one tylko generują później nieoczekiwane błędy w działaniu aplikacji, utrudniają debugowanie oraz intencje programisty są de-facto nieznane. To jak tworzenie pudełka nicości, które ma wszystko zawierać i być nieokreślonego kształtu, masy i wymiaru.
P-119591
Monika90
» 2014-10-28 20:40:43
można void* skonwertować do char* za pomocą static_cast
P-119594
mac104
Temat założony przez niniejszego użytkownika
» 2014-10-28 23:22:09
Chciałem stworzyć klasę ze wskaźnikiem na blok pamięci tylko że z niesprecyzowanym typem danych. Nie chcę przecież tworzyć wiele razy tej samej klasy dla wszystkich typów zmiennych. Niby nie jest to czasochłonne (kopiuj, wklej) ale takie nie ambitne. No a poruszanie się po bloku wymaga działań na wskaźniku. Wydawało mi się że void* jest czymś takim uniwersalnym za pomocą czego można zrobić wiele interesujących rzeczy. Ale kompilatorowi ciągle przeszkadza, nie mogę napisać "*wskaznik = ...", "delete[] wskaznik", czy o czym pisałem: "char * a = voidwskaznik". Myślałem że ogarniam co to jest void* i po co jest, wychodzi że nie :(
P-119607
1aam2am1
» 2014-10-29 09:09:43
Poczytaj o:

http://pl.wikipedia.org/wiki/Typedef
P-119610
pekfos
» 2014-10-29 09:25:09
Ale kompilatorowi ciągle przeszkadza, nie mogę napisać "*wskaznik = ...", "delete[] wskaznik", czy o czym pisałem: "char * a = voidwskaznik". Myślałem że ogarniam co to jest void* i po co jest, wychodzi że nie :(
Jeśli tak próbowałeś, to faktycznie, w ogóle nie o to w tym chodzi. Jaki ma sens wpisywanie wartości, czy usuwanie obiektu nieznanego typu i rozmiaru..? A void* na cokolwiek innego trzeba jawnie rzutować.

Chciałem stworzyć klasę ze wskaźnikiem na blok pamięci tylko że z niesprecyzowanym typem danych. Nie chcę przecież tworzyć wiele razy tej samej klasy dla wszystkich typów zmiennych. Niby nie jest to czasochłonne (kopiuj, wklej) ale takie nie ambitne.
Szablony..?
P-119611
DejaVu
» 2014-10-29 11:07:47
Ja znam tylko jeden uzasadniony przypadek grzebania w danych po void*. Jest to pisanie własnego alokatora pamięci, który zarządza przydzielonym blokiem pamięci i tym samym rozmiar alokowanych danych nie jest stały. Ale to i tak jest de-facto utworzenie skrzynki, która wyrzuca z siebie ostatecznie dane, które mają określony typ i rozmiar.
P-119612
« 1 » 2
  Strona 1 z 2 Następna strona