.[ ČeskéHry.cz ].
Skrýtí závislosti na STL

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 4. duben 2012, 21:17:01    Předmět: Skrýtí závislosti na STL Odpovědět s citátem

Zdravím ve spolek,

pracuju teď na jednom frameworku, a ten nepoužívá STL, všechno si totiž implementuje sám a nebo používá další "3rd party" knihovny.

Problém je v tom, že s příchodem C++11 jsou ve STL "věci", které nelze nijak re-implementovat, protože vyžadují určitou "pomoc" překladače. Mluvím konkrétně o hlavičce <type_traits>, ve kterých najdete "funkce" pro SFINAE, např. is_pod(), is_union(), is_abstract(), apod.

Problém je v tom, že já ty nové "věci" ze STL potřebuju naládovat do toho framework, tak ale abych skryl závislost na STL (do té doby než to půjde jinak). Přemýšlel jsem, že bych udělal něco takového:
kód:
namespace Core
{
    namespace Private
    {
        #include <type_traits>
    }
    template<typename T>
    struct IsAbstract : Private::std::is_abstract<T>
    {
        ...
    }
}


Samozřejmě to nefunguje... Ta hlavička (v implementaci pro MSVC) používá spousty maker, které jsou z větší části fixované na jmenný prostor std, takže to nejde zkompilovat (háže plno chyb i v takto jednoduchém příkladu).

Věděl by někdo nějaký trik na to, jak s tím vyčůrat (tak abych ale nemusel přímo editovat ten hlavičkový soubor type_traits)? Rolling Eyes
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Tringi



Založen: 28. 07. 2007
Příspěvky: 290

PříspěvekZaslal: 5. duben 2012, 08:11:57    Předmět: Odpovědět s citátem

A) Nic jako STL neexistuje, to je jen zažité historické označení, správě je "standardní knihovna" (bez ohledu na templejtky)
B) Nejde. Dědičnost v C++ nevyřešíš aniž by byli viditelní rodiče.
C) Proč to vůbec potřebuješ? Jaký máš důvod odstínit i takové malé hlavičky jako <type_traits>?
_________________
WWW | GitHub | TW
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 5. duben 2012, 10:47:04    Předmět: Odpovědět s citátem

-Samozřejmě, ale The Internet by s tebou určitě nesouhlasil Wink
-To byl jen příklad pro zjednodušení. Ve skutečnosti to dělám bez dědičnosti a využívám jen hodnotu konstanty "value".
-Už jsem to vysvětloval. Ten framework STL vůbec nepoužívá, tak proč bych měl "špinit" globální jmenný prostor tím jmenným prostorem std z hlavičky type_traits. Už jen tím importem té hlavičky zašpiním ten framework všemi těmi makry z té hlavičky.
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Tringi



Založen: 28. 07. 2007
Příspěvky: 290

PříspěvekZaslal: 5. duben 2012, 11:31:23    Předmět: Odpovědět s citátem

Tak s konstantou se lze vypořádat tak, že ji definuješ v jednom extra souboru a do ostatních ji přivedeš pomocí extern. Nic lepšího asi vymyslet nejde.

Namespace std je v mnoha místech nedílnou součástí C++. Na jedno z takových míst jsi narazil, dalšími jsou std::nothrow, std::bad_alloc, celé <typeinfo> a další, nově například std::begin a std::end, std::nullptr_t nebo std::initializer_list.
Pokud ti tak moc vadí, budeš se muset bez těchto featur obejít.
Zašpinění makry bych se nebál, zběžně jsem si <type_traits> z GCC proletěl a ačkoliv si pomocných maker pár definuje, zase je na konci zruší, a pokud hlavičky tvého kompilátoru za sebou nějaké smetí nechávají, asi bych přehodnotil, jak moc zrovna tento potřebuju.
_________________
WWW | GitHub | TW
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna