如何使大量现有函数在一个类的范围内可用?

Posted

技术标签:

【中文标题】如何使大量现有函数在一个类的范围内可用?【英文标题】:How to make large numbers of existing functions available in the scope of a class? 【发布时间】:2011-10-04 04:48:45 【问题描述】:

我需要将一个大型(100 个源文件)项目制作成一个库,通过将它们全部放入一个类对象来删除数十个全局变量。

问题是现在需要成为 class 的成员的数千个函数,以便它们可以访问对象变量。

除了将MyClass:: 添加到源文件中的每个函数定义之外,有没有办法欺骗并指出特定源文件中的所有函数都应属于MyClass 范围?

【问题讨论】:

为什么?如果它没有坏,就不要修理它。 拥有数千个成员函数的类听起来是个很糟糕的主意。 为什么?因为这就是对我的要求。把它全部变成一个大类似乎是完成所需工作的最佳方式,将一个大型单线程项目变成一个多线程库。时间也是有限的,所以手工编辑越少越好。 【参考方案1】:

将所有全局变量添加到 namespace

// MyGlobals.h
namespace MyGlobals

  extern int g_i;
  extern double g_d;
  extern A g_A;

无论您想访问什么文件,都可以:

using namespace MyGlobals;

在头文件中。通过这种 (using namespace) 方式,您可以指示所有变量都应该可以访问,而无需对该文件使用范围解析 ::。 (即,您可以在该文件中简单地访问 g_i 而不是 MyGlobals::g_i)。

另外请注意,您必须在 .cpp 文件中定义所有全局变量:

// MyGlobals.cpp
#include "MyGlobals.h"

int MyGlobals::g_i;
double MyGlobals::g_d;
A MyGlobals::g_A;

【讨论】:

绝对是显而易见且最简单的方法,但 如果 需要允许库功能的多个独立实例,这将是不够的。一个超级班也不是一个好方法……:-]。 你说得对,我需要它是线程安全的,所以必须删除所有全局变量和静态变量。你会建议我怎么做? @user750895,这将是一个非常主观的答案。您可能必须自行更改设计。

以上是关于如何使大量现有函数在一个类的范围内可用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用我的 IP 地址使 localhost:3000 在全球范围内可用?

如何使 ElasticSearch 客户端在应用程序范围内可用?

问:使用 Vue 3 和 typescript(使用 cli 构建的项目)使 vuex 存储在全球范围内可用 +已解决

如何编写使用临时容器的范围管道?

Matplotlib:使范围内的所有值都显示在 x 轴上

如何让我的 Python 模块在 Linux 系统范围内可用?