2016-12-16 13 views
0

私の名前空間に別の名前空間のものを使用したいのですが、私の名前空間の一部にする必要はありません。C++ネームスペース:所有しないで使用する

namespace my_ns{ 
    enum class c: unsigned long long int{}; 

    namespace literals{ 
     constexpr c operator"" _c(unsigned long long int i)noexcept{ 
      return c(i); 
     } 
    } 

    using namespace literals; 

    auto xyz = 4_c; // OK: use literals::operator""_c 
} 

void some_function(){ 
    using namespace my_ns; // shall not implicit include my_ns::literals! 

    auto abc = xyz; // OK 
    auto def = 4_c; // shall not know my_ns::literals::operator""_c 
} 

は私がusing namespacesome_functionではないstdstd::literalsmy_nsではなく、一貫性のために、ユーザリテラルを使用したい:より具体的な私は、次のような状況があります。一貫性の議論が頭痛の価値があると思いますか?

もしそうなら、それをやる方法やそれと似たようなことがありますか?あなたは、ネストされたdetail名前空間を使用して試してみて、あなたがメインmy_ns名前空間にしたいものだけを公開することができ

+1

答えは簡単です:ディレクティブを使用して、あなたの名前空間を吹き飛ばしません。 –

+0

質問が募集されます:誰かにそれを使用させたくない場合はなぜカスタムリテラルを作成するのですか? –

答えて

2

namespace my_ns 
{ 
    namespace detail 
    { 
     using namespace literals; 
     auto xyz = 4_c; // OK: use literals::operator""_c 
    } 

    using detail::xyz; 
} 
関連する問題