如何使用 Eclipse CDT 自动将类从命名空间中取出?

Posted

技术标签:

【中文标题】如何使用 Eclipse CDT 自动将类从命名空间中取出?【英文标题】:How can I take a class out of a namespace automatically with Eclipse CDT? 【发布时间】:2021-05-10 00:21:12 【问题描述】:

我有一个类 A,它位于 C++ 中的命名空间 N 内,因此我可以在代码中使用 N::A 引用它。

我需要在 Eclipse CDT 中将该类从命名空间 N 中取出。 当然,我还需要在代码库中编辑所有使用N::A 表示法引用此类的事件,以便删除引用命名空间N 的部分。

我想知道在 Eclipse 中是否有一种方法可以自动执行此操作,这样我就不必在代码中的任何地方手动执行此操作。

【问题讨论】:

我不知道(但怀疑)这是否是 Eclipse CDT 的自动化重构任务。通常的方法(这符合 IMO 的有效用例)是为命名空间前缀定义一个宏,并在预处理阶段有条件地替换它。必须始终如一地完成,当然需要完全重新编译所有受影响的代码。 我会尝试通过文本编辑器的替换所有功能将所有出现的“N::A”替换为“A” 【参考方案1】:

一种可行的方法是使用using N::A 将类A 加载到全局命名空间。然后您可以使用 Eclipse CDT 的find and replace 功能将所有出现的N::A 编辑为A

您可以将using N::A 仅放置在您希望类位于全局命名空间中的文件中,或者您可以在类头文件的末尾定义它,以便它会自动在每个文件中定义包括班级。以这种方式使用它意味着只有 A 类被转储到全局命名空间,而使用 using namespace N; 将该命名空间的每个内容转储到全局命名空间。

【讨论】:

以上是关于如何使用 Eclipse CDT 自动将类从命名空间中取出?的主要内容,如果未能解决你的问题,请参考以下文章

eclipse cdt 中的‘字符串’没有命名类型错误”

在 Eclipse/CDT 中使用自定义 Makefile [重复]

Eclipse CDT 自动包含共享库

如何将类从父组件应用到 Vue.js 功能组件?

Eclipse CDT 自动完成功能不起作用

如何从现有的 C++ 源代码在 Eclipse CDT 中创建 GNU Autotool 项目?