Odpověď na názor

Odpovídáte na názor ke článku Minimalistický http server v C++.

  • 1. 10. 2018 20:09

    Ondřej Novák

    Zdravím, děkuji za reakci, následně odpovím na následující námitky

    > * funkce deklaruje statické i když jsou v anonymním namespace.
    Primárně byly pouze statické, protože je velký rozdíl mezi funkcí v anonymním namespace a funkce statické
    1. statické funkce se neexportují
    2. funkce v anonymním namespace se exportují ale pod náhodným namespace
    (aspoň takto to dělá msvc, nevím jaký je aktuální stav)

    Obecně používám pomocné funkce deklarované jako statick. Jednou z výhod také je, že překladač většinou warningem označí funkce, které už nepoužívám.

    anonymní namespace byl vložen proto, že některá verze GCC si stěžovala, že deklarace třídy je v cpp souboru (jako warning). Jinak bych to neřešil

    > * v C++11 existuje constexpr (autor používá na stringové a číselné konstanty static const )
    asi hodně podobné jako u toho static funkce. Před C++11 se to tak běžně psalo. Moc jsem to nesledoval a nevidím v tom velký rozdíl

    > * obluda std::pair<std::strin­g_view, std::string_view>[] místo std::map a ještě píše v komentáři, že si to má programátor při úpravě řadit podle abecedy :-D

    Ta obluda je rychlejší než std::map, a zabírá méně místa. Běžně používám u staticky alokovaných asociativních polí (slovníků)

    > * podivná šablona RAII (pro Socket a FileDesc je lepší vytvořit třídu, když už k nim má stejně nějaké funkce, zbytek stačí std::unique_ptr

    Vaše řešení opět znamená, že místo toho, aby deskriptor dál byl uložen v intu, tak ho máte alokovaný v paměti a ještě potřebujete pointer. Nepřijde mi to, že bych si pomocí C++ pomohl. Proč mám pro něco co v C zabírá 8 bajtů alokovat dalších desítek bajtů jen proto, že si neumím napsat jazykovými prostředky třídu, která to zvládne bez toho? A proč je to špatně tak jak to mám já?

    > * použití operátoru () v SplitString
    Protože SplitString je funktor, který vrací další řetězec v pořadí. Je to efektivnější, než se zaobírat iterátory

    Obecně iterační fuktor používám

    auto x = a.create_iterator()
    while (!!x) {
    do_something(x())
    }

    nezvyklé? Ale dobře se s tím pracuje.