Diskuze: Pointer na funkciu
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 8 zpráv z 8.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Můžeš si vytvořit halavičkový soubor - třeba main.h , kde deklaruješ prototyp tvojí funkce a pak ho includuješ jak do hlavního sketche *.ino tak do tvojeho *.cpp souboru
Další možnost je tu funkci přesunout do té tvojí nové třídy
Doporučuju využít té druhé možnosti a v souboru *.ino (sketch) nechávat jen dvě základní funkce : setup() a loop(), případně nějaké pomocné, které budeš používat jen tam a nikde jinde
Ukazatel na funkci jsem mu ani nenabízel (i když si o něj víceméně řekl v titulku)- píše, že je "uplny zaciatocnik" - a ukazatele na funkci jsou přece jenom trochu "vyšší dívčí" - navíc by ho asi musel předávat jako parametr při volání nějaké funkce z té jeho třídy - a to asi úplně nechtěl.
Myslím,že ukazatel na funkci nepotřebuje - spíš upravit návrh.
Nebo tu funkci deklaruj jako extern
v souboru *.ino
extern void FunkceZhlavnihoKodu()
{
.....
}
a v *.cpp souboru opět
extern void FunkceZhlavnihoKodu();
void MyClass::fce ()
{
FunkceZhlavnihoKodu();
}
Dakujem, uz som to vyriesil. Potreboval som vyriesit nieco ako event na udalost. A kedze sa mi nechcelo predavat vsetky parametre danemu objektu tak som to vyriesil volanim funkcie odkazom. Funkcia je v hlavnom subore .ino a tym padom ma pristup k vsetkym potrebnym objektom, ktore potrebujem obsluzit.
Davam aj kod keby to niekto potreboval:
V ino subore:
void event(uint8_t offset){
// kod ktory potrebujes spustit a ma pristup k zdrojom v ino subore
}
void loop(){
MojaTrieda mojObjekt(&event);
// Spusti metodu event definovanu vyssie
mojObjekt.spust();
}
Hlavickovy subor:
class MojaTrieda
{
public:
// New type: pointer to function
using pFunction = void(*)(uint8_t offset);
//
MojaTrieda(pFunction event);
void spust();
private:
// adresa funkcie ktoru ma spustit
pFunction _event;
};
Cpp subor:
MojaTrieda::MojaTrieda(pFunction event){
_event = event;
}
MojaTrieda::spust(uint8_t offset){
_event(uint8_t offset);
}
To myslíš vážně ?!
void event(uint8_t offset){
// kod ktory potrebujes spustit a ma pristup k zdrojom v ino subore
}
void loop(){
MojaTrieda mojObjekt(&event);
// Spusti metodu event definovanu vyssie
mojObjekt.spust();
}
což je to samé jako
void event(uint8_t offset){
// kod ktory potrebujes spustit a ma pristup k zdrojom v ino subore
}
void loop(){
event(offset);
...
...
}
já myslel, že chceš používat funkci z hlavního kódu v nějaké
třídě nezávisle na hlavním kódu
tvůj způsob řešení předáním ukazatele na funkci je sice jedním z
možných ale v tomto případě nejméně vhodný - protože zatěžuje paměť
- všechny proměnné (tedy i ukazatele) jsou v RAM, které nemá Atmega v
Arduinu na rozdávání - je to jen pár kilo (u Arduino Mega 8kB, u Arduino Uno
dokonce jen 2kB) - což si málokdo uvědomuje, a ta ti dojde dřív, než by
ses nadál - moje zkušenost je, že když ti kompilátor zahlásí využití
RAM na 90% , tak ti program určitě dřív, nebo později zkolabuje
tu samou službu ti poskytne ten extern - což je záležitost kompilátoru a na paměti se ti nijak neprojeví
Samozrejme, ze ten kod nebude taky jednoduchy. Na tom arduine mam kopec cidiel, displej, klavesnicu a pod. Takze to na co som sa pytal ma svoj zmysel. Tak poprosim nehejtovat, bez znalosti suvislosti.
Zobrazeno 8 zpráv z 8.