A jeżeli chodzi o STL to zobacz https://www.arduinolibraries.info/libraries/arduino-stl
Mała lekka (bez sterty) namiastka std::vector
Ciekawe.
Zastanawiam się tylko, czemu biblioteki standardowej nie ma tam fabrycznie. Czy mieli jakiś dobry powód, by jej nie dawać?
Bo jeśli tak, to... jakoś mam opory przed zarówno korzystaniem z czyichś portów jak i przed implementowaniem elementów biblioteki standardowej samodzielnie, przynajmniej dopóki nie będę wiedział, czemu jej nie ma. Być może to nieracjonalny strach.
A jaką wersję C++ masz dostępną? Możesz używać std::array
?
Array też nie ma. C++ można chyba sobie skonfigurować nawet na wersję 17, tyle że nie ma biblioteki standardowej.
Zmienne mutable
pozwalają na zmianę w stałych obiektach poprzez funkcje set
(...)
Jeżeli potrzebne są stałe pola
No pozwalają, ale... czy to nie jest nadużycie mutable
? W sensie - stałe pola nie są potrzebne, żeby coś napisać, one nie zwiększają siły wyrazu języka, one tylko pozwalają dołożyć jakąś wartstwę statycznej weryfikacji programu. Korzystanie z const
a potem walenie mutable
jakby mija się z celem, już lepiej w ogóle olać całą tą const correctness.
Jeśli te 2 parametry są inicjowane wartościami wg wzoru powyżej, to można tak:
DISCLAIMER: absolutnie i w żadnym wypadku nie uważam poniższego za dobry pomysł ;)
Ale bez STL-a i innych nowych wynalazków (lambdy w tym przypadku tylko z lenistwa - możesz użyć zwykłych funkcji).
Fajne wykorzystanie static
ów, nie wpadłem na to :)
W zasadzie mogę to nawet wykorzystać, program jest tylko po to, by sz.p. Laborant mnie zaliczył, raczej nie grozi mi zachodzenie za 2 lata w głowę co ja tam narobiłem :)
Albo pytanie jest bardziej skomplikowane niż mi się wydaje, albo wystarczy zwykłe rzutowanie i konstrukcja w miejscu klasy.
Ot trochę "edukacyjnie"...
Wow. Placement new.
Uczciwie przyznaję, że dotąd unikałem placement new jak ognia. Cytując oficjalne FAQ:
ADVICE: Don’t use this “placement new” syntax unless you have to. Use it only when you really care that an object is placed at a particular location in memory. For example, when your hardware has a memory-mapped I/O timer device, and you want to place a Clock object at that memory location.
DANGER: You are taking sole responsibility that the pointer you pass to the “placement new” operator points to a region of memory that is big enough and is properly aligned for the object type that you’re creating. Neither the compiler nor the run-time system make any attempt to check whether you did this right. If your Fred class needs to be aligned on a 4 byte boundary but you supplied a location that isn’t properly aligned, you can have a serious disaster on your hands (if you don’t know what “alignment” means, please don’t use the placement new syntax). You have been warned.
Co do mnie dotarło po przeczytaniu tego:
Albo masz sporo niskopoziomowej, ezoterycznej wiedzy albo co tu w ogóle robisz??
Ponieważ nie wiem dokładnie, jakie obiekty mają jakie wymogi odnośnie alignment ani od czego to zależy, to...
WYDAJE MI SIĘ, że tablice char
mają zagwarantowane, że są wyalignmentowane do dowolnego "rozsądnego" obiektu; ale tylko WYDAJE MI SIĘ, a tutaj chyba "wydaje mi się" to za mało.
Wierzę Ci, że zrobiłeś to OK, ja tylko tłumaczę się, czemu sam się w to nie bawiłem (ani na to nie wpadłem)