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 15:55 | Bezpečnostní upozornění

Společnost Oracle vydala čtvrtletní bezpečnostní aktualizaci svých softwarových produktů (CPU, Critical Patch Update). Opraveno je celkově 270 bezpečnostních chyb. V Oracle Java SE je například opraveno 17 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 16 z nich. V Oracle MySQL je opraveno 27 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 5 z nich.

Ladislav Hagara | Komentářů: 0
dnes 02:48 | Nová verze

Po půl roce od vydání verze 9.0 (zprávička) byla vydána verze 10.0 zvukového serveru PulseAudio. Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 24
dnes 00:33 | Komunita Ladislav Hagara | Komentářů: 8
včera 17:30 | Zajímavý článek

Mozilla.cz informuje, že webový prohlížeč Firefox bude od verze 53 obsahovat integrovaný prohlížeč dat ve formátu JSON. Firefox kromě strukturovaného prohlížení nabídne také možnost filtrace a uložení na disk. Dle plánu by měl Firefox 53 vyjít 18. 4. 2017.

Ladislav Hagara | Komentářů: 1
včera 11:00 | Komunita

Členové a příznivci spolku OpenAlt se pravidelně schází v Praze a Brně. Fotky z pražských srazů za uplynulý rok si můžete prohlédnout na stránkách spolku. Příští sraz se koná už zítra 19. ledna – tentokrát je tématem ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. Také budete mít příležitost si prohlédnout pražský hackerspace Brmlab.

xkucf03 | Komentářů: 1
17.1. 21:55 | Komunita

Nadace pro svobodný software (FSF) oznámila aktualizaci seznamu prioritních oblastí (changelog), na které by se měli vývojáři a příznivci svobodného softwaru zaměřit. Jsou to například svobodný operační systém pro chytré telefony, hlasová a video komunikace nebo softwarový inteligentní osobní asistent.

Ladislav Hagara | Komentářů: 20
17.1. 16:44 | Nová verze

Byla vydána verze 2.0.0 knihovny pro vykreslování grafů v programovacím jazyce Python Matplotlib (Wikipedie, GitHub). Přehled novinek a galerie grafů na stránkách projektu.

Ladislav Hagara | Komentářů: 0
17.1. 15:33 | Komunita

V australském Hobartu probíhá tento týden konference linux.conf.au 2017. Na programu je celá řada zajímavých přednášek. Sledovat je lze online.

Ladislav Hagara | Komentářů: 0
17.1. 10:20 | Zajímavý článek

Pavel Tišnovský se v dvoudílném článku na MojeFedora.cz věnuje bitmapovým (rastrovým) grafickým editorům ve Fedoře. V prvním dílu se věnuje editorům MyPaint, MtPaint, Pinta, XPaint, Krita a GIMP. V pokračování pak editorům GNU Paint (gpaint), GrafX2, KolourPaint, KIconEdit a Tux Paint.

Ladislav Hagara | Komentářů: 1
16.1. 17:11 | Komunita

Byl proveden bezpečnostní audit svobodného IMAP a POP3 serveru Dovecot (Wikipedie). Audit byl zaplacen z programu Mozilla Secure Open Source a provedla jej společnost Cure53. Společnost Cure53 byla velice spokojena s kvalitou zdrojových kódu. V závěrečné zprávě (pdf) jsou zmíněny pouze 3 drobné a v upstreamu již opravené bezpečnostní chyby.

Ladislav Hagara | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (10%)
 (2%)
 (74%)
 (3%)
 (11%)
Celkem 332 hlasů
 Komentářů: 24, poslední 17.1. 10:14
    Rozcestník
    Reklama

    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: 406×
    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.