C++中是否有类似于Python的“import bigname as b”的等价语句?

6

我一直喜欢Python的

技术。
import big_honkin_name as bhn

这样,你可以在代码中使用bhn.thing,而不是big_honkin_name.thing这种更冗长的方式。

我在C++代码中看到了两种命名空间的用法,分别是:

using namespace big_honkin_name; // includes fn().
int a = fn (27);

(我被告知这是一件坏事)或:

int a = big_honkin_name::fn (27);

有没有一种方法可以在C++代码中使用Python功能,就像这样:

alias namespace big_honkin_name as bhn;
int a = bhn::fn (27);
6个回答

13
namespace bhn = big_honkin_name;

还有另一种使用命名空间的方法:

using big_honkin_name::fn;
int a = fn(27);

啊,相当于“from big_honkin_name import fn”的等价物。知道这个也很好。 - paxdiablo

12

6

这很容易...

namespace bhn = big_honkin_name;

2

您可以使用

using big_honkin_name::fn;

从名称空间 big_honkin_name 导入所有名为 fn 的函数,这样你就可以写下以下代码:

int a = fn(27);

但这并不是让您缩小名称本身的方法。要做到类似但不完全相同的效果,您可以按照以下步骤操作:

int big_honkin_object_name;

您可以随后使用:

int& x(big_honkin_object_name);

此后,您需将x视为与big_honkin_object_name相同。在大多数情况下,编译器会消除隐含的间接引用。


1
using namespace big_honkin_name;

引入命名空间并不是什么坏事,完全不是。如果明智地使用,将命名空间引入作用域会通过删除不必要的杂乱代码来提高代码的清晰度。

(除非它在头文件中,这样做非常不好

但是,正如其他人指出的那样,您可以创建命名空间别名:

namespace big = big_honkin_name;

实际上,我记得有一个专家推荐在某些晦涩的情况下(我无法回忆起来),你应该创建一个新的块作用域,并在调用不合格的 some_func() 之前使用 "using namespace XYZ;",而不是调用 XYZ::some_func(),因为前者会干扰名称查找。但愿我能回忆起具体情况 - 有人知道吗? - j_random_hacker

1

很好,Python导入的C++等效方式如下:

Python到C++

import someLib as sl => namespace sl = someLib;

from someLib import func -> using someLib::func;

from someLib import * -> using namespace someLib;

请注意,在这些操作之前,您必须在C++中执行#include<someLib>

最后一个非常有名!

#include<iostream>
using namespace std;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接