2017-01-13 24 views
0

想想看,我想打電話給boost::algorithm::joinboost::join,但我不希望導入子名字空間的全局命名空間的子名稱:命名空間別名在本地範圍

namespace boost { 
    using algorithm::boost; 
}; 

因爲我想打電話給boost::join與這句法僅在特定函數的局部範圍:

void my_fun() 
{ 
    namespace boost { // Doesn't allowed syntax in local scope 
     using algorithm::join; 
    } 

    auto ret = boost::join(something...); 
} 

一種不同的方法是:

void my_fun() 
{ 
    using boost::algorithm::join; 
    auto ret = join(something...); 
} 

但是這會引發ADL查找,我不想做這樣的查找,因爲我知道我在調用什麼方法:boost::algorithm::join

只是,我試圖找到較短的boost::join的方式來調用它。創建「子名稱空間」別名的正確語法或習慣用法是什麼?

+1

聽起來像你可以使用[名稱空間別名](http://en.cppreference.com/w/cpp/language/namespace_alias) – NathanOliver

+0

不要惹別人的名字空間。您可以創建自己的'namespace boost_misc'或任何您想調用它的名稱,但不要將名稱添加到'namespace boost'。 –

+0

我不明白你對ADL有什麼反應?這不是在運行時發生的事情,只是在編譯時。對於您遇到的問題,這是一個非常簡單的解決方案。 –

回答

1

如果不污染Boost命名空間,不能污染Boost命名空間。

也許下面的妥協可以爲你工作?

namespace balgo = boost::algorithm; 

然後使用balgo::join

所以這不是一個非常具有描述性的名字,但是你正試圖在一個狹窄的範圍內做一個簡短的別名,對吧?

否則,受影響的區域應該足夠小,以至於簡單的join清晰且明確(即using namespace boost::algorithm);否則,只需使用完全限定的名稱即可。你的團隊會爲此感謝你。