Red Hat řeší bezpečnostní incident, při kterém došlo k neoprávněnému přístupu do GitLab instance používané jejich konzultačním týmem.
Immich byl vydán v první stabilní verzi 2.0.0 (YouTube). Jedná se o alternativu k výchozím aplikacím od Googlu a Applu pro správu fotografií a videí umožňující vlastní hosting serveru Immich. K vyzkoušení je demo. Immich je součástí balíčků open source aplikací FUTO. Zdrojové kódy jsou k dispozici na GitHubu pod licencí AGPL-3.0.
Český telekomunikační úřad vydal zprávy o vývoji cen a trhu elektronických komunikací se zaměřením na rok 2024. Jaká jsou hlavní zjištění? V roce 2024 bylo v ČR v rámci služeb přístupu k internetu v pevném místě přeneseno v průměru téměř 366 GB dat na jednu aktivní přípojku měsíčně – celkově jich tak uživateli bylo přeneseno přes 18 EB (Exabyte). Nejvyužívanějším způsobem přístupu k internetu v pevném místě zůstal v roce 2024 bezdrátový
… více »Raspberry Pi OS, oficiální operační systém pro Raspberry Pi, byl vydán v nové verzi 2025-10-01. Přehled novinek v příspěvku na blogu Raspberry Pi a poznámkách k vydání. Jedná o první verzi postavenou na Debianu 13 Trixie.
Byla vydána nová verze 4.6 svobodného notačního programu MuseScore Studio (Wikipedie). Představení novinek v oznámení v diskusním fóru a také na YouTube.
Společnost DuckDuckGo stojící za stejnojmenným vyhledávačem věnovala 1,1 milionu dolarů (stejně jako loni) na podporu digitálních práv, online soukromí a lepšího internetového ekosystému. Rozdělila je mezi 29 organizací a projektů. Za 15 let rozdala 8 050 000 dolarů.
Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.17. Díky 278 přispěvatelům.
Bylo vydáno openSUSE Leap 16 (cs). Ve výchozím nastavení přichází s vypnutou 32bitovou (ia32) podporou. Uživatelům však poskytuje možnost ji ručně povolit a užívat si tak hraní her ve Steamu, který stále závisí na 32bitových knihovnách. Změnily se požadavky na hardware. Leap 16 nyní vyžaduje jako minimální úroveň architektury procesoru x86-64-v2, což obecně znamená procesory zakoupené v roce 2008 nebo později. Uživatelé se starším hardwarem mohou migrovat na Slowroll nebo Tumbleweed.
Ministerstvo průmyslu a obchodu (MPO) ve spolupráci s Národní rozvojovou investiční (NRI) připravuje nový investiční nástroj zaměřený na podporu špičkových technologií – DeepTech fond. Jeho cílem je posílit inovační ekosystém české ekonomiky, rozvíjet projekty s vysokou přidanou hodnotou, podpořit vznik nových technologických lídrů a postupně zařadit Českou republiku mezi země s nejvyspělejší technologickou základnou.
… více »Radicle byl vydán ve verzi 1.5.0 s kódovým jménem Hibiscus. Jedná se o distribuovanou alternativu k softwarům pro spolupráci jako např. GitLab.
A *o
na *functor
, možná to jen nechápu...
struct { size_t a; size_t b; };
Nejspíš by se i našel způsob, jak během compile-time zjistit, jestli ten member func pointer není větší...
operator ()
, protože tam se to castuje na jiný typ, než který byl uložený, a každý může mít jinak velké member pointery.
#ifndef NDEBUG ... #endif
)
at
je hází úmyslně, neházející verze je operator []
.
GCC má debug verzi STL, která asserty obsahuje.
typeid(void(Ts...))
nebo neco podobneho.
template <typename ReturnT, typename... ParamTs> class Callback { protected: struct Iface { virtual ~Iface() {} virtual ReturnT operator ()(ParamTs... params) = 0; }; template <typename Type> struct Impl : public Iface { using Func = ReturnT (Type::*)(ParamTs...); Impl(Type &obj, Func func) : obj(obj) , func(func) {} virtual ~Impl() {} virtual ReturnT operator ()(ParamTs... params) { return std::forward<ReturnT>(obj.*func(std::forward<ParamTs...>(params))); } Type &obj; Func func; }; Iface& iface() { return *reinterpret_cast<Iface*>(buf); } size_t buf[4]; public: template <typename Type> Callback(Type &obj, typename Impl<Type>::Func func) { // Místo static_assert lze upravit, aby to použilo new static_assert(sizeof(Impl<Type>) <= sizeof(buf), "Buffer not large enough to capture callback"); new (buf) Impl<Type>(obj, func); } ~Callback() { iface().~Iface(); } ReturnT operator ()(ParamTs... params) { return std::forward<ReturnT>(iface()(std::forward<ParamTs...>(params))); } }; Callback callback(t, &Type::getValueForInput); int value = callback(input);
std::forward
na návratové hodnoty je zbytečný, navíc nebude fungovat s void
.
virtual ReturnT operator ()(ParamTs... params)
a virtual ~Impl()
v Impl
by bylo lepší označit override
.
Callback
templatová třída, pak se rovnou může použít std::function
, ne?
operator ()
) by šlo zabalit přes reinterpret_cast, protože není polymorfní (takže je to jen pointer na funkci, kde první parametr je this
), ale nebude to ověřovat typy parametrů.
Ten reinterpret_cast v původní implementaci nebude fungovat, pokud bude castovat z polymorfní třídy na nepolymorfní či obráceně, a nejspíš ani pokud bude mezi různými stromy polymorfních tříd, protože u virtuálních metod je to typicky implementováno jako index do vtable, nikoliv pointer.
class functor { protected: struct iface { virtual ~iface(){}; }; template <typename... Ts> struct args : public iface { virtual void call(Ts...) = 0; }; template <typename A, typename... Ts> struct impl : public args<Ts...> { A* obj; void (A::*func)(Ts...); impl(A* o, void (A::*f)(Ts...)) : obj(o), func(f) {} void call(Ts... args) { (obj->*func)(args...); } }; size_t i[4]; public: template<typename A, typename... Ts> functor(A* o, void (A::*f)(Ts...)) { static_assert(sizeof(impl<A, Ts...>) <= sizeof(i), "Buffer not large enough to capture callback"); new (i) impl<A, Ts...>(o,f); } template<typename... Ts> void operator()(Ts... params) { args<Ts...> *a = dynamic_cast<args<Ts...>*>(reinterpret_cast<iface*>(i)); if(a) a->call(params...); else qDebug() << "bad parameters"; } };
Tiskni
Sdílej: