2016-12-16 38 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 
} 

我想在my_ns但一致性stdstd::literals使用用戶文字不some_functionusing namespace後。你認爲一致性論證值得頭痛嗎?

如果是這樣,有沒有辦法做到這一點或做類似的事情?

+1

答案很簡單:不吹走你的命名空間使用的指令。 –

+0

問題是:如果你不打算讓任何人使用它,爲什麼要創建一個自定義文字? –

回答

2

你可以嘗試使用嵌套detail命名空間,那麼只有你想要的東西暴露在主my_ns命名空間:

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

    using detail::xyz; 
}