V Edici CZ.NIC, knižní řady správce české národní domény, vychází nová kniha Martina Malého Kódy, buildy, firmwary. Autor po půl roce od vydání předchozího titulu přichází se svou již sedmou knihou, tentokrát zaměřenou na vývoj programového vybavení pro embedded zařízení. Publikace s podtitulem Základy vývojářského řemesla pro tvůrce hobby elektroniky nabízí praktického průvodce pro všechny, kdo své projekty vytvořené s Arduinem
… více »V Brně na FIT VUT probíhá dvoudenní open source komunitní konference DevConf.CZ 2026. Na programu je celá řada zajímavých přednášek, lightning talků, meetupů a workshopů. Přednášky lze sledovat i online na YouTube kanálu konference. Aktuální dění lze sledovat na Matrixu, 𝕏 nebo Mastodonu.
Byla vydána nová verze 15.1 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.
Vývojáři Ubuntu představili projekt Myna, tj. iniciativu zaměřenou na přidání funkce převodu řeči na text do prostředí desktopu Ubuntu. Dle plánu již v Ubuntu 26.10.
Společnost Epic Games představila nový open source systém pro správu verzí Lore navržený pro "bezprecedentní škálovatelnost dat i týmů a optimalizovaný pro projekty, včetně her a zábavy, které kombinují kód s velkými binárními soubory, aby uspokojil potřeby vývojářů i umělců". Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
Úřad pro ochranu hospodářské soutěže (ÚOHS) provedl v říjnu 2024 místní šetření u společnosti Seznam.cz. Úřad prověřoval důvodné podezření na možné protisoutěžní jednání, konkrétně zneužití dominantního postavení. Krajský soud v Brně v květnu 2025 konstatoval, že toto šetření bylo nezákonné. Nejvyšší správní soud (NSS) včera rozhodl, že šetření bylo provedeno v souladu se zákonem. Krajský soud bude muset případ posoudit znovu.
Byl představen skládací telefon Commodore Callback 8020. Ani hloupý, ani chytrý. Pro fanoušky Commodore a digitálního minimalismu. Bez webového prohlížeče a sociálních sítí. S předinstalovaným WhatsAppem. S operačním systémem Sailfish OS.
V OpenBSD byla objevena 27 let stará chyba v ppp pomocí níž lze vzdáleně obejít autentifikaci. Chyba byla nahlášena 12.6. a 14.6. byla opravena. Bližší info v článku A 27-Year-Old Authentication Bypass in OpenBSD's PPP Stack.
Odpověď Evropské komise (pdf) k evropské občanské iniciativě Stop Destroying Videogames, jež je součástí hnutí Stop Killing Games: "Komise se domnívá, že v této fázi nemůže navrhnout právní povinnost zachovat hratelnost videoher poté, co přestaly být poskytovány komerčně. Důvodem jsou i stávající práva duševního vlastnictví. Podle autorského práva EU mají nositelé práv výlučná práva ke svým výtvorům. Kromě autorských práv mohou být
… více »Byl vydán Mozilla Firefox 152.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 152 bude brzy k dispozici také na Flathubu a Snapcraftu.
std::function<void (EraseResult)> OnEraseDone;
std::thread eraseDisc(bool quick, OnEraseDone callback)
{
std::thread th(std::bind(&Device::_eraseThread, this, callback));
return std::move(th);
}
void _eraseThread(OnEraseDone callback)
{
// blabla
}
Callbacky mi tak hezky fungovaly, ale jen do té doby, než jsem místo obyčejné funkce jako callback chtěl použít pointer na metodu:
// v metodě objektu typu Test std::thread th = eraseDisc(true, OnEraseDone(&Test::eraseDone, this));Kompilátor nahlásí slušnou 100 řádkovou chybu, ze které se zdá, že takový konstruktor std::function nemá a std::bind mi taky nepomůže. Otázkou tedy je, co použít místo std::function (GCC 4.4 ještě neumí lambda funkce, tak ty taky ne, boost knihovnu taky nee), nebo poradit, co dělám špatně.
Řešení dotazu:
std::mem_fn, Jardiku!
bind (nějak takhle):
eraseDisc(true, boost::bind(&Objekt::metoda, this));
Skoro jistě (nechce se mi to zjišťovat) je to v C++0x taky (asi se to bude jmenovat std::bind), najdi si to.
Nebo můžeš bejt frikulín, a jít do lambdy (bez záruky jak na syntax, tak na funkčnost v nějakým kompilátoru):
eraseDisc(true, []{ this->metoda(); } );
Na std::function je konvertovatelný buď func-pointer, nebo funktor.
Tahleta dnesni mladez ...
std::bind(std::mem_fn(&Test::eraseDone), this)
std::function<void (EraseResult)>
Jo aha, vy tam mate jeste jeden volnej parametr... s vama je teda prace!
#include <functional>
#include <string>
#include <iostream>
struct test
{
void run(const std::string& message)
{
std::cout << message << "\n";
}
};
int main(int argc, char** argv)
{
using namespace std::placeholders;
test t;
std::function<void (const std::string&)> f = std::bind(&test::run, &t, _1);
f("Hola hola");
}
(Mate recht, jde to i bez std::mem_fn, musim se podivat, proc mne to bez nej kdysi neslo...)
std::bind(&Test::eraseDone, this, std::placeholders::_1)
Děkuju.
Kompilator musi pripravit kod, kterej za behu rozhodne jestli je metoda virtualni nebo ne, jestli nahodou neni zdedena od virtualniho predka a pod.Nikoliv, kompilátor nic takového dělat nemusí. Ani nemůže, protože za běhu v programu taková informace prostě není (ledaže by si ji tam ten implementátor speciálně kvůli tomuhle přidal, ale v takovém případě je pochybné mluvit o tom jako o opruzu - implementátor si za ten opruz může sám, a to i v případě, kdy chce dodržet nějaké ABI). Pokud jde o ukazatele na metodu, je situace celkem jednoduchá - asi nejjednodušší implementace je dvojice
(pointer na funkci, offset pro this) s tím, že pro volání virtuální funkce ap. kompilátor vygeneruje kód
Ret synthesized_thunk(T* that, Args... args) {
that->real_function(args);
}
a tuhle funkci použije do toho PMF.
zabira member pointer 6-12B na 32bit platformachTo není vůbec k divení, takových věcí je víc.
Je to jedna z nejtezsich veci pro impementatory C++ kompilatoruImplementoval ten váš expert RTTI? Výjimky? Linker? To jsou všechno věci těžší, anebo pracnější, a zcela určitě jejich datové struktury zabírají víc, než pouhých 12 B.
Ja jsem si z toho vzal ponauceni ze nikdy member pointer pouzivat nebuduUniká mi logika tohohle kroku. I když to nebudete používat, implementovat se to bude pořád stejně (těžce nebo lehce, to je jedno).
ze mi staci trida command s metorou run.... čímž se ochudíte o jakýkoli generický kód, který spolupracuje s funktory. Disclaimer: Tento příspěvek rozhodně nemá vyvolat dojem, že PMF by se měly používat nějak masově. IMHO jsou PMF v C++ jedním z reliktů C (v tomto případě ukazatelů na funkce) a jejich použití přináší např. výkonnostní problémy, na druhou stranu není jednoduché a nepodporuje znovupoužitelnost kódu.
Tiskni
Sdílej: