Deskreen byl vydán ve verzi 1.0.0. Jedná se o aplikaci umožňující používat libovolné zařízení s webovým prohlížečem jako druhou obrazovku, viz videoukázka. Zdrojové kódy jsou k dispozici na GitHubu pod licencí AGPLv3.
Byla vydána nová verze 0.11.0 raw photo editoru Filmulator. Zdrojové kódy jsou k dispozici na GitHubu pod licencí GPLv3. Ke stažení je také spustitelný balíček ve formátu AppImage.
Byla vydána nová verze 13.8 softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech GitLab (Wikipedie). Představení nových vlastností i s náhledy a videi v příspěvku na blogu.
Otevřená certifikační autorita Let’s Encrypt v příspěvku na svém blogu představila své nové databázové servery. Hardware: 2U rack server Dell EMC PowerEdge R7525, CPU 2x AMD EPYC 7542, Memory 2TB 3200MT/s, Storage 24x 6.4TB Intel P4610 NVMe SSD. Software: OpenZFS a MariaDB s InnoDB.
Článek systemd pro vývojáře: lokální vývojové servery v systemd na MojeFedora.cz doporučuje vývojářům používání systemd k ovládání svých projektů pomocí "systemctl --user".
Vyšla nová verze souborového manažera Midnight Commander 4.8.26. Mezi hlavní novinky patří zachování obsahu příkazové řádky při přepínání panelů pomocí Ctrl+O, stíny okolo dialogových oken jako v Norton Commanderu a dalších (vytvořeno autorem zprávičky), podpora jakkoli dlouhých názvů souborů a spousta dalších drobnějších věcí.
Projekty Elasticsearch a Kibana změní s verzí 7.11 licenci. Už se nebude jednat o open source software. Důvodem změny licence byl spor se společností AWS (Amazon Web Services). AWS na změnu licence odpovídá vlastním forkem. Vycházet bude z verze 7.10 a zůstane pod open source licencí Apache.
Lidé ze společnosti Corellium se včera na Twitteru pochlubili screenshotem Ubuntu na Apple Siliconu aneb zprovoznili Ubuntu na počítači Apple s novým ARM procesorem M1. CTO jej už používá k vývoji ve svém herním křesle s 49 palcovým monitorem. Dnes byly na blogu Corellium publikovány detaily a pro případné zájemce i návod a obraz ke stažení. Upravili obraz Ubuntu pro Raspberry Pi.
Rodina počítačů Raspberry Pi se rozšířila o jednočipový počítač Raspberry Pi Pico v ceně 4 dolary s vlastním procesorem RP2040. Představení na YouTube.
Společnost Red Hat na svém blogu oznámila, že Red Hat Enterprise Linux (RHEL) bude možné provozovat zdarma na 16 serverech.
template<typename T> void foo(const T something) { // akého typu bude T }zavolám funkciu takto:
auto my = "xyz"; // my je typu const char* foo(my);Premená my je typu const char*, lenže pred typom funkcie už const je, const pred argumentom znamená že hodnota argumentu sa nedá modifikovať. lenže const char* je aj samostatný typ, (nekompatibilný s char*) Aký typ bude mať parameter T? char*? alebo const char*; A je zápis void foo(const const char* something) ekvivalentný k void foo(const char* something)? 2. ako v static_asserte vypíšem aktuálny názov typu priradený do template parametra? Príklad:
#define requires_some_type(Type) \ static_assert(std::is_same_v<Type, some_type>, __FUNCTION__ ": The parameter '" #Type "' was expected to have type 'some_type', but here has type '" (sem niečo patrí) "'");3. Dajme tomu že chcem niečo testovať takto:
if constexpr (vyraz) { // nejaky kod } else { static_assert(false, "Some message"); }a v else vetve chcem vypísať chybovú, hlášku ktorá sa zobrazí v compile time. Neexistuje nejaká náhrada za static assert ktorá vypíše len chybovú hlášku bez potreby testovania výrazu?
[C++11: 14.1/4]: A non-type template-parameter shall have one of the following (optionally cv-qualified) types: integral or enumeration type, pointer to object or pointer to function, lvalue reference to object or lvalue reference to function, pointer to member, std::nullptr_t. [C++11: 14.1/5]: The top-level cv-qualifiers on the template-parameter are ignored when determining its type.
použít typeindex a typeinfo by asi jako možná šlo hele :O :O
#include <iostream> #include <typeindex> #include <typeinfo> template<typename T> void test(T typ) { std::type_index index(typeid(typ)); std::cout << index.name() << std::endl; } int main() { int cislo = 123; std::string str = "venku hrozne prsi tedko :O :O"; const char * cchar = "a uvnitr taky protoze vitr sebral strechu :O :O :O :O"; test(cislo); test(str); test(cchar); return 0; }
noa jestli si fortrane ;D ;D přešel nato gcc tak nám to vrací ty typy v mangled formě :O :/
v linuxu to de vodmanglovat nástroječkem co se menuje c++filt hele takle ty data typy
c++filt -t PKc
a vrátit by to mělo const char *
something
? Typu const T
.
const char *
znamena ukazatel na const char - tedy const je ten char uvnitr, ne pointer.
const T
znamena konstantni typ T, takze to vyjde:
const char * const
tedy konstantni ukazatel na konstantni char.
Kdybys pouzival east-const, tak je to jasne videt:
(char const *) + (T const) = (char const * const)
template<typename T> constexpr bool always_false = false;a pak použiješ v else větvi:
static_assert(always_false<T>, "Some message")
static_assert(false, "Assertion failed");
?else
větve if constexpr
podmínky vždy nesplněný assert? Není jednodušší tu podmínku nacpat přímo do static_assert
u? Výsledný kód bude přehlednější a navíc půjde přeložit i na překladačích, co ještě neznají constexpr
podmínky.
V čem je tohle lepší než
static_assert(false, "Assertion failed");
?
asi to jakoby fakt bude správná vodpověď natu trojku protože todleto fakt umí v template funkci vypsat datovej typ narozdíl vod static_assert(false,"blah") :O :O :D ;D
template<typename T> constexpr bool always_false = false; template <typename T> void test(T blah) { static_assert(false, "venku vuuuubec neprsi"); static_assert(always_false<T>, "protoze greta neni z moravy :D ;D"); } int main() { test(10.0); return 0; }
noa g++ nám zanadává v druhým assertu v hranatejch závorkách jakej to byl jako typename vtý šabloně strčenej :O :O :O :O
assertovani.cpp: In function ‘void test(T)’: assertovani.cpp:6:15: error: static assertion failed: venku vuuuubec neprsi 6 | static_assert(false, "venku vuuuubec neprsi"); | ^~~~~ assertovani.cpp: In instantiation of ‘void test(T) [with T = double]’: assertovani.cpp:12:10: required from here assertovani.cpp:7:15: error: static assertion failed: protoze greta neni z moravy :D ;D 7 | static_assert(always_false<T>, "protoze greta neni z moravy :D ;D"); | ^~~~~~~~~~~~~~~
možná je nějaký víc elegantnější řešení jak tam to T jakoby nějak strčit dotoho assertu ale nevim :O :O
static_assert(false)
v constexpr if
u nefunguje
ten pomocný výraz to vyhodnocení "odloží" - je to hack a constexpr if
by měl být asi chytřejší, ale bohužel...
já jsem to použil následovně:
// enum class Policy {}; // template<Policy T> if constexpr (T == Policy::Random) { // kúštěk kódu } else if constexpr (T == Policy::FIFO) { // kúštěk kódu } else { static_assert(always_false<T>, "Using unimplemented Policy"); }neříkám, že to nejde udělat jinak, ale static_assert dává mnohem hezčí chybové hlášky btw. (ne)pěkně to c++ bobtná
Tiskni
Sdílej: