2017-03-17 86 views
1

是否有任何方法可以省略顶级名称空间内其他名称空间的某些函数的外部名称空间名称?使用其他名称空间内的名称空间的函数

void sample_func(); 

namespace foo { 
void first_func(); 

namespace bar { 
void second_func(); 
void sample_func(); 
} 

一切都是平凡的first_func():只是打字using foo::first_func;允许调用它就像fist_func();

一切都很简单,如果我想打电话给second_func没有任何前缀:只是using foo::bar::second_func;允许称其为second_func();

但是有什么办法可以称之为bar::second_func();?它会增加代码的可读性 - 更好地键入并看到类似bar::sample_func而不是完整的foo::bar::sample_func而没有名称混淆:显然using namespace foo::bar不是这种情况下的选项。

UPD我没有兴趣在导入整个foobar命名空间(即using namespace ...指令!我需要的只是一些功能,从他们。

回答

1

您可以使用

namespace bar = foo::bar; 

导入foo::bar到当前名字空间刚刚bar

0

namespace::或者如果不是在一个命名空间,即

::前缀它
::sample_func(); 

foo::first_func(); 
bar::second_func(); 
bar::sample_func(); 
+0

它需要'使用命名空间...',我。即全局命名空间中的每个函数都应该以'::'作为前缀。我只需要'foo'和'bar'中的一些广泛使用的函数子集而不暴露所有的名称空间。 – avtomaton

0

您可以使用

using namespace foo; 

在您希望使用的任何声明区域只需first_func()bar::sample_func()

例子:

int main() 
{ 
    using namespace foo; 
    first_func(); 
    bar::sample_func(); 
} 
+0

不是最好的方法:foo可以非常大,我不想完全从它导入所有的名字,只是'foo :: bar'命名空间中的一些函数,但是我需要在'foo :: bar'中的名字和全局名称空间中的名称。 – avtomaton