如何使大量现有函数在一个类的范围内可用?
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 客户端在应用程序范围内可用?