C++ #include<XXX.h>相当于 Python 导入的 XXX 作为 X
C++ #include<XXX.h> equivalent of Python's import XXX as X
我大部分时间都在使用Python,由于某些原因,现在我也需要使用C++。
我发现Python的导入XXX作为X非常整洁,例如:
import numpy as np
a = np.array([1,2,3])
通过查看我的代码,我非常清楚array()
函数是由numpy
模块提供的。
但是,在使用C++时,如果我这样做:
#include<cstdio>
std::remove(filename);
乍一看,我不清楚std
命名空间下的remove()
函数是由<cstdio>
提供的。
所以我想知道是否有办法在 Python 中import XXX as X
方式在C++中做到这一点?
不。
如果你写std::remove
(无论如何你都应该这样做;不能保证该符号在全局命名空间中可用),它会稍微清楚一些,因为这样至少你会知道它来自标准标头。
除此之外,这取决于你的记忆。
有些人试图引入这样的黑客:
namespace SomeThing {
#include <cstdio>
}
// Now it's SomeThing::std::remove
这可能适用于您自己的标头(尽管即使那样我仍然不鼓励这样做)。但它肯定会导致标准标头的各种混乱,并且是不允许的:
[using.headers]/1:
C++标准库中的实体在标头中定义,当翻译单元包含适当的#include
预处理指令时,其内容可供翻译单元使用。
[using.headers]/3:
翻译单元应仅在任何声明或定义之外包括标题,并且应在该翻译单元中首次引用该标题中声明的任何实体之前在词汇上包括标题。无需诊断。
回想一下,#include
和import
是根本不同的东西。C++模块可能会在某种程度上实现这种功能,但是通过包含源代码,您甚至不会触及由该代码创建的符号命名空间。
不,没有办法强制使用这种语法。开发您包含的代码的人是免费的。通常,人们将他们的代码拆分为命名空间,这可能会导致以下语法:
#include <MyLibrary.h>
int main()
{
MyLibrary::SayHello();
return 0;
}
但是你无法保证标头中的代码是如何编写的。
C++
#include<XXX.h>
相当于Python的导入XXX作为X
C++中没有等价物。
当您将一个文件包含在另一个文件中时,您可以从包含的文件中获取每个声明,并且您无法选择更改其名称。
不过,您可以为类型和命名空间添加别名,以及对对象的引用,以及编写包装函数来执行 Python 中as X
部分所做的一些操作。
乍一看我并不清楚 remove() 是由
<cstdio>
提供的。
std
命名空间至少告诉您它是由标准库提供的。
我喜欢做的是文档,哪个标头提供使用的声明:
#include<cstdio> // std::remove
std::remove(filename);
也就是说,大多数 IDE 可以通过按住 ctrl 单击或将鼠标悬停在标识符上来显示标识符的声明位置(尽管当不同标头中存在重载时,这并不总是有效)。我对包含注释的主要用途是检查重构后可以删除哪些包含。
- 尝试导入pybind-opencv模块时出现libgtk错误
- 导入库可以跨dll版本工作吗
- 建议在运行时将带有类实例的列表从c++导入qml
- 导入/导出变量时出错
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 将QT项目导入Visual Studio 2019会给我带来很多LNK2001错误
- 是否可以将函数导入命名空间,但不能导出它?
- 如何将 CLion C++ 项目导入 Visual Studio?
- Python 3.8 不能与 Pybind11 一起导入 [Windows]
- 无法将标准库导入本机 android 项目中的头文件
- 尝试了解在导入的静态方法上使用删除方法时的错误
- 在 python 模块中导入子模块时PyImport_Import失败
- 将 C# DLL 导入 C++ 以用于 JNI
- 使用 QSslCertificate 在 Qt 中正确导入 pkcs12
- 在从Qt调用的Python脚本中导入OpenCV崩溃
- 编译boost_python扩展无法在 python 2.7 中导入
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- Dll在同一解决方案中从 c# 项目导入到 c++ 项目
- C++20 使用 Visual Studio 编译模块:不编译或导入 ixx 文件
- C++ #include<XXX.h>相当于 Python 导入的 XXX 作为 X