-
Data: 2022-07-25 18:00:26
Temat: Re: Rynek pracy STM32
Od: Piotr Gałka <p...@c...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu 2022-07-25 o 16:31, heby pisze:
>> Mi chodziło o to aby: nie tworzyć statycznej zmiennej konkretnyGUID
>> tylko zapis jego wartości ująć jakoś od razu w miejscu gdzie go
>> wstawiłeś jako parametr konstruktora KlasyBazowej w konstruktorze
>> Klasy konkretnej.
>
> Nie rozumiem jaki by to miało mieć zysk.
Bo to być może nie da się zrozumieć - jakieś chore moje koncepcje :)
Dla Ciebie 'zysk' to jakieś oszczędności pamięci lub czasu realizacji.
A dla mnie zysk z takiego podejścia polega na tym, że dopisanie kolejnej
klasy to byłoby kilka linijek w jednym pliku, a nie po kilka w dwu plikach.
Jak nowa klasa nie wymaga nic w pliku cpp to dopisuję ją tylko do
jednego wspólnego dla wszystkich tych klas pliku h.
Jak wymaga też czegoś w pliku cpp to w moim pojęciu wypada już całą ją
przenieść do plików h i cpp opisujących urządzenie (inna klasa) które
korzysta z tej bazowej tabelki w której to jest mi potrzebny GUID.
Ale nie jestem do tego aż tak przywiązany.
> Możesz zrobić tak:
>
> class KlasaBasowa {
> [...]
> virtual GUI& getGUID() = 0;
> };
>
> class KlasaKonkretna : public KasaBazowa {
> [...]
> GUID& getGUID() override {
> static GUID guid = { };
> return guid;
> }
> }
Jak mi się nie udało to zrobiłem podobnie jak napisałeś w powyższym
przykładzie tylko nie w tej klasie a w klasie wołającej jej funkcję
wyszukania wszystkich urządzeń - tam robię lokalnego GUID i go używam.
> Ale zysk taki, że masz metodę wirtualną ale nie masz pola w klasie bazowej.
Patrzysz cały czas na kod wynikowy, a mi chodziło o krótkość zapisu.
Wszystkie używane guidy mam zebrane razem w jednym miejscu - to jest dla
mnie zaleta.
> Dlaczeo konstruktor chcesz mieć w h? Zwyczajowo nie ma powodów tego.
Jak konstruktor tylko woła kontruktor klasy bazowej wstawiając tam
konkretne liczby to jak go napiszę w h to chyba on nawet zrobi się sam
inline.
>> Ja chciałem zrobić coś podobnego jak mam definiowane mikrokontrolery.
>> Mam:
>> class ATProg : public ATProc
>> {
>> ....
>> public:
>> ATProg(dword fs,dword fp,dword es,dword ep,qeord fm,dword
>> sg):ATProc(...){}
>> };
>> I potem już konkretne są definiowane tak:
>> class ATmega162Prog : public ATProg
>> {
>> public:
>> ATmega162Prog():ATProg(0x4000,128,512,1,0x1EFFFF,0x1
E9404){}
>> };
>
> No wiec w czym problem?
Problem, że jak chciałem tak zrobić to mi nie wyszło. Nie potrafiłem
wpisać wartości konkretnego guid jako parametr w wywołaniu konstruktora
klasy bazowej. O tym, że nie potrafiłem go wpisać w miejsce parametru
już chyba trzeci raz piszę.
>
> class KlasaBazowa {
> public:
> KlasaBasowa( int a1, int a2, int a3m int a4 );
> [...]
> };
>
> class KlasaKonkretna : publci KlasaBazowa {
> public:
> KlasaKonkretna() : KlasaBazowa( 1,2,3,4 ) { };
> };
>
>
>> Czyli konstruktor klasy bazowej miał mieć jeden parametr typu GUID a
>> konstruktory kolejnych klas miały go wołać wpisując tam wartość tego
>> GUIDa.
>
> No to dokładnie tak to opisałem.
Tak, ale z liczbami int.
Wiem tyle, że jak chciałem tak zrobić z guid to mi nie wyszło.
> Być może widzisz to jako problem, że ten GUID jest widoczny przez cały
> czas trwania programu w zmiennej globanej, do której przekazujesz
> referencje. To jest szybkie - nie trzeba go w miejscu inicjować za
> każdym razem.
>
>> Wiem, że mi się to nie udało. Ogólnie wiem, że nie udawało mi się
>> wpisać GUIDA jako parametru wywołania konstruktora (bezpośrednio w
>> wywołaniu).
>
> Jesli mówisz o inicjacji w miejscu, to powinno dać radę tak:
>
> struct GUID {
> int a1;
> int a2;
> };
>
> class KlasaBazowa {
> public:
> KlasaBazowa( GUID const& _gui ) { /*tu mam GUID*/ };
> };
>
> class KlasaKonkretna : public KlasaBazowa {
> public:
> KlasaKonkretna() : KlasaBazowa( {1,2} ) { }
> };
>
> Zmienna istnieje tylko na czas wołania konstruktora KlasaBazowa. Musi
> być wykorzystana w nim i nie wolno przetrzymać referencji na dłużej
> (choć można zrobić kopię). Zapis {1,2} inicjuje GUIDa w miejscu i jest z
> nowego C++, w starym to pewnie będzie "GUID(1,2)", zalezy jaki konstruktor.
Zaczyna to być jakby w tym kierunku co ja kombinuję.
Tylko wiem, że nie udało mi się wtedy tego zapisać tak, aby kompilator
przyjął. Nie udało mi się też konwertować bufora bajtów w guid, czy
jakiegoś innego zapisu np kilku wordów w guid.
Ale to było ileś lat temu. Teraz powinienem ponownie popróbować, aby
wskazać co konkretnie mi nie wychodzi, ale mam zero czasu.
Poprzedni post przerwałem bo coś miałem zrobić. Jak tylko to skończyłem
to piszę ten, a w międzyczasie ustaliliśmy tu, że muszę się pilnie czymś
kolejnym zająć (potrzebne na środę) no i znów nie dojdę do powtarzania
eksperymentów.
Po prostu okazja, aby o tym pogadać trafiła się gdy inne zadania
zabierają totalnie czas. Niektóre plany i tak już nieco zawaliłem.
P.G.
Następne wpisy z tego wątku
- 25.07.22 18:12 heby
- 25.07.22 20:40 Piotr Gałka
- 25.07.22 21:29 heby
- 26.07.22 13:53 Piotr Gałka
- 26.07.22 14:16 Piotr Gałka
- 26.07.22 14:55 heby
- 26.07.22 20:05 Piotr Gałka
- 28.07.22 20:55 Piotr Gałka
Najnowsze wątki z tej grupy
- Światłowód między budynkami
- POtrzebny bufor 3.3<>5V, jedonkieruowy, trójstanowy, wąski
- retro
- Bezprzewodowe polączenie Windows z projektorem
- rozklejanie obudowy
- Prośba o identyfikację komponentu
- Smart gniazdko straciło na zasięgu wifi?
- Smart gniazdko straciło zasięg wifi?
- nurtuje mnie
- dziwna sprawa...
- Laptop MSI się nie uruchamia.
- Dobra listwa LED (CRI 90-95, bez migotania)
- masowe programowanie AVR
- Fajny pomysł na monitor z klawiaturą
- Sprzedawanie zaszyfrowanych filmów na płytach Blu-Ray bez kluczy deszyfrujących
Najnowsze wątki
- 2024-11-02 piszę list do św Mikołaja
- 2024-11-01 karta SIM nie działa w konkretnym smartfonie.
- 2024-11-01 Mamy WZROST! O 50% wzrosła ilość kredytów gotówkowych
- 2024-11-01 Warszawa => Expert Recruiter 360 <=
- 2024-11-01 Warszawa => Technical Leader (Java Background) <=
- 2024-11-01 Warszawa => Account Manager - Usługi rekrutacyjne <=
- 2024-11-01 Warszawa => Head of International Freight Forwarding Department <=
- 2024-11-01 Warszawa => Programista Dynamics 365 CRM <=
- 2024-11-01 Warszawa => Dynamics 365 CRM Developer <=
- 2024-11-01 Warszawa => Junior Rekruter <=
- 2024-11-01 Chrzanów => Specjalista ds. PR Produktowego <=
- 2024-11-01 Białystok => Full Stack web developer (obszar .Net Core, Angular6+) <
- 2024-11-01 Łódź => Frontend Engineer (Three.js) <=
- 2024-11-01 Warszawa => Junior Rekruter <=
- 2024-11-01 Gdańsk => Programista Full Stack .Net <=