abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

dnes 13:33 | Pozvánky

Byly stanoveny termíny konferencí LinuxDays 2017 a OpenAlt 2017. Letošní LinuxDays proběhne o víkendu 7. a 8. října v Praze v Dejvicích v prostorách FIT ČVUT. Letošní OpenAlt proběhne o víkendu 4. a 5. listopadu na FIT VUT v Brně.

Ladislav Hagara | Komentářů: 0
dnes 11:11 | Komunita

Jiří Eischmann z desktopového týmu Red Hatu se v příspěvku Linuxový desktop: Co vám chybí na svém blogu ptá, co uživatele na Fedora Workstation a na linuxovém desktopu obecně trápí a co by desktopový tým mohl zlepšit. Pokud máte nějaké podněty, napište mu je do komentářů.

Ladislav Hagara | Komentářů: 28
dnes 03:33 | Nová verze

Byla vydána nová verze 0.25.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Z novinek lze zmínit například podporu DVB-T2. Další části mpv byly přelicencovány z GPLv2 nebo novější na LGPLv2.1 nebo novější (#2033).

Ladislav Hagara | Komentářů: 0
dnes 02:22 | Zajímavý projekt

Na Bundle Stars byla spuštěna akce Dollar Forever Bundle. Za 1 dolar lze získat 24 počítačových her bežících na platformě Steam také v Linuxu.

Ladislav Hagara | Komentářů: 1
včera 23:44 | Zajímavý software

Lychee je jedním z open source softwarů pro tvorbu webových fotoalb. Vyžadováno je PHP 5.5 nebo novější a MySQL. Ukázka na stránkách projektu. Zdrojové kódy jsou k dispozici na GitHubu pod open source licencí MIT [reddit].

Ladislav Hagara | Komentářů: 5
včera 22:22 | Zajímavý software

Společnosti Haivision a Wowza společně oznámily vznik SRT Alliance a otevření protokolu pro streamování videa SRT. Podrobnosti v FAQ. Zdrojové kódy SRT jsou k dispozici na GitHubu pod open source licencí LGPLv2.1.

Ladislav Hagara | Komentářů: 0
včera 12:33 | Humor

Byl vydán remake filmu Ghost in the Shell. Tentokrát v Bashi. Zhlédnout lze online na "ssh ghost@theshell.xyz" [Hacker News].

Ladislav Hagara | Komentářů: 16
23.4. 20:40 | Zajímavý článek

Lukáš Růžička v článku S Hydrogenem za lepší rytmus aneb bubeníkem snadno a rychle na MojeFedora.cz představuje automatického bubeníka s názvem Hydrogen (Wikipedie): Hydrogen je velmi vydařený program, který rozhodně nesmí chybět ve výbavě žádného linuxového muzikanta. Umožňuje nejen vytváření jednoduchých bicích doprovodů, ale také sofistikované programování bicích a perkusí, jehož výsledek se naprosto vyrovná drahým

… více »
Ladislav Hagara | Komentářů: 16
23.4. 13:55 | Zajímavý projekt

UPSat (Twitter) je první open source nanodružice (CubeSat). Jedná se o společný projekt nadace Libre Space Foundation a University of Patras. Repozitáře projektu jsou k dispozici na GitHubu. Pod Libre Space Foundation patří také projekt SatNOGS (zprávička), projekt globální sítě open source pozemních satelitních stanic, vítězný projekt soutěže The Hackaday Prize 2014. UPSat je součástí mise QB50 (Twitter). ID UPSatu je GR02. GPS přijímač na UPSatu je od české společnosti SkyFox Labs. Součástí mise QB50 je i česká nanodružice VZLUSAT-1 s ID CZ02.

Ladislav Hagara | Komentářů: 5
21.4. 15:00 | Komunita

V diskusním listu Thunderbird planning vývojáři poštovního klienta Thunderbird řeší, zda by nebylo možné budoucí Thunderbird postavit nad webovými technologiemi, tj. nad Electronem, stejně jako například Nylas Mail. Gecko, nad kterým je Thunderbird postaven, se má hodně změnit. V plánu je odstranění vlastností, které Firefox už nepotřebuje, ale Thunderbird je na nich závislý [Hacker News, reddit].

Ladislav Hagara | Komentářů: 100
Chystáte se pořídit CPU AMD Ryzen?
 (4%)
 (34%)
 (0%)
 (7%)
 (45%)
 (9%)
Celkem 297 hlasů
 Komentářů: 32, poslední včera 12:24
    Rozcestník

    Dotaz: c++ templates and overloading

    25.2.2010 16:46 extremni lama | skóre: 14 | blog: e_lama
    c++ templates and overloading
    Přečteno: 408×
    Zdavim, mam nasledujici 2 soubory (a.cpp a b.cpp). Jediny rozdil je ze v b.cpp jsem presunul string_t a string_traits do vlastniho jmenneho prostoru. Pritom a.cpp jde zkompilovat (gcc) bez problemu, ale b.cpp skonci s chybou:
    /usr/lib/gcc/3.4.4/include/c++/bits/stl_function.h: In member function `bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = xxx::string_t]':
    b.cpp:54:   instantiated from here
    /usr/lib/gcc/3.4.4/include/c++/bits/stl_function.h:227: error: no match for 'operator<' in '__x < __y'
    
    Zajimavy je ze yyy::less funguje ale std::less ne. Pritom jsem yyy::less vytvoril jako kopii std::less...

    a.cpp:
    #include <boost/mpl/bool.hpp>
    #include <boost/utility/enable_if.hpp>
    #include <functional>
    
    namespace yyy
    {
      template<typename _Tp>
        struct less : public std::binary_function<_Tp, _Tp, bool>
        {
          bool
          operator()(const _Tp& __x, const _Tp& __y) const
          { return __x < __y; }
        };
    }
    
    struct string_t { };
    
    template <typename string_type_>
    struct string_traits;
    
    template <>
    struct string_traits<string_t>
    {
            typedef string_t string_type;
    };
    
    template <typename A, typename B>
    struct both_exist: public boost::mpl::true_ {};
    
    template <typename T, typename U>
    inline
    typename boost::enable_if
    <
            both_exist
            <
                    typename string_traits<T>::string_type,
                    typename string_traits<U>::string_type
            >,
            bool
    >::type operator < (const T &str1, const U &str2)
    { }
    
    int main()
    {
            yyy::less<string_t> cmp;
            std::less<string_t> cmp1;
            string_t a;
            string_t b;
            cmp(a, b);
            cmp1(a, b);
    }
    
    
    b.cpp:
    #include <boost/mpl/bool.hpp>
    #include <boost/utility/enable_if.hpp>
    #include <functional>
    
    namespace yyy
    {
      template<typename _Tp>
        struct less : public std::binary_function<_Tp, _Tp, bool>
        {
          bool
          operator()(const _Tp& __x, const _Tp& __y) const
          { return __x < __y; }
        };
    }
    
    namespace xxx {
    
            struct string_t { };
    
            template <typename string_type_>
            struct string_traits;
    
            template <>
            struct string_traits<string_t>
            {
                    typedef string_t string_type;
            };
    
    }
    
    template <typename A, typename B>
    struct both_exist: public boost::mpl::true_ {};
    
    template <typename T, typename U>
    inline
    typename boost::enable_if
    <
            both_exist
            <
                    typename xxx::string_traits<T>::string_type,
                    typename xxx::string_traits<U>::string_type
            >,
            bool
    >::type operator < (const T &str1, const U &str2)
    { }
    
    int main()
    {
            yyy::less<xxx::string_t> cmp;
            std::less<xxx::string_t> cmp1;
            xxx::string_t a;
            xxx::string_t b;
            cmp(a, b);
            cmp1(a, b);
    }
    
    
    The enemy of my enemy is still my enemy.

    Řešení dotazu:


    Odpovědi

    25.2.2010 17:39 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: c++ templates and overloading
    Mrvi vam to boost. Kdyz ho vyhodite (ve vasem priklade je stejnak zbytecny), tak se to zkompiluje.
    25.2.2010 18:11 extremni lama | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: c++ templates and overloading
    Diky za tip. Zjistil jsem ze boost includuje <utility> a to vytvari v std "operator <" pro porovnani std::pair. Tak jsem vyzkousel pridat "operator <" i do yyy:
    namespace yyy {
            class x;
            inline bool operator < (x const &a, x const &b) { }
    }
    
    a dela me to stejnou chybu i s yyy::less. Takze zrejme ten muj "operator <" neni pristupny v zadnym namespace kde uz existuje jiny "operator <".

    Nejak to nechapu... chapal bych kdyby to muj operator prekrylo vzdycky, ale proc to dela jenom kdyz je string_t a string_traits v xxx ??
    The enemy of my enemy is still my enemy.
    25.2.2010 18:44 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: c++ templates and overloading
    25.2.2010 18:53 extremni lama | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: c++ templates and overloading
    diky, uz jsem to taky dohledal. Takze je to vlastnost a ten "univerzalni operator <" (prispevek dole) asi nijak neudelam?
    The enemy of my enemy is still my enemy.
    25.2.2010 18:48 extremni lama | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: c++ templates and overloading
    tak jsem zjistil ze kdyz ten template operator < presunu do xxx tak to funguje.

    Problem je (see http://en.wikipedia.org/wiki/Argument_dependent_name_lookup), ze napr pri pouziti yyy::less, gcc nejdriv najde yyy::operator<, potom prohleda namespacy asociovany s argumentama a najde xxx::operator<, a root namespace uz neprohledava...

    Tak nevim. Je tohle vlastnost nebo chyba ? A je teda mozny udelat operator <, ktery by fungoval na vsechny string tridy co maji string_traits, at uz jsou v jakymkoli jmennym prostoru ?
    The enemy of my enemy is still my enemy.
    25.2.2010 18:59 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: c++ templates and overloading

    Co by "univerzalni" operator< mel delat? To je problem kazde implementace stringu, aby mela i svoji definici porovnani, ktera bude ve stejnem namespacu, takze vsechno bude fungovat, jak ma.

    25.2.2010 19:20 extremni lama | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: c++ templates and overloading
    moje predstava byla ze bych mel nekolik typu stringu, napr std::string alokovany na halde, potom nejaka vlastni trida pro retezce jen na zasobniku, a mozna i dalsi kombinace...

    Ke kazdymu bych udelal string_traits, kde by byly funkce begin() a end() ktery vrati ukazatele na zacatek/konec retezce a "operator <" bych potom mohl pouzit na porovnavani ruznych trid stringu...

    The enemy of my enemy is still my enemy.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.