我希望有一个静态类,可以容纳不同类型的数据(如目录,值等).我尝试过使用namespaces但是namespace不允许使用成员变量,我需要保存数据(如果我错了,请纠正我).
我正在试图做的是保存一些常量整个程序使用- scalingFactor和screenSize仅举几例.然后,我希望这些数据由程序的所有部分共享.像这样的东西:
在Foo.cpp中:
void doSomething( float p_Float ) {
printf( "Scaled Float is %.2f", p_Float * Globals.scalingFactor );
}
Run Code Online (Sandbox Code Playgroud)
在Goo.cpp中:
void doSomethingElse( ) {
printf( "Scaling Factor is %.2f", Globals.scalingFactor );
}
Run Code Online (Sandbox Code Playgroud)
本scalingFactor应该是指相同的值,价值scalingFactor在全球静态类Globals.
提前致谢.
编辑:我还需要使用全局函数,它是否与此问题中的变量一样工作?
所以只需将其作为static会员:
//Globals.h
class Globals
{
public:
static float scalingFactor;
}
Run Code Online (Sandbox Code Playgroud)
在单个实现文件中初始化它:
//Globals.cpp
#include "Globals.h"
float Globals::scalingFactor = 42.0;
Run Code Online (Sandbox Code Playgroud)
并使用范围解析运算符来访问它:
float x = Globals::scalingFactor;
Run Code Online (Sandbox Code Playgroud)
我尝试过使用命名空间,但命名空间不允许使用成员变量
您没有正确使用名称空间.以下应该有效:
标题中的声明:
namespace Globals
{
extern float scalingFactor;
}
Run Code Online (Sandbox Code Playgroud)
和定义:
//Globals.cpp
namespace Globals
{
float scalingFactor = 42.0;
}
Run Code Online (Sandbox Code Playgroud)
C++没有静态类.只是上课.但这听起来像是命名空间的完美工作.是的,您可以将数据放入名称空间.在头文件中写一个声明,用extern表示数据;
// program_data.h:
namespace program_data {
extern float scalingFactor;
extern int screenSize;
} // namespace program_data
Run Code Online (Sandbox Code Playgroud)
在一个源文件中,提供共享数据的定义:
// program_data.cpp:
#include "program_data.h"
namespace program_data {
float scalingFactor = 13.765; // whatever...
int screenSize = 640;
} // namespace program_data
Run Code Online (Sandbox Code Playgroud)
无论你需要使用这些东西,只需用他们的命名空间限定名称来引用它们:
// foo.cpp:
#include "program_data.h"
void doSomething( float p_Float ) {
printf( "Scaled Float is %.2f", p_Float * program_data::scalingFactor );
}
Run Code Online (Sandbox Code Playgroud)
并且,是的,严格的OOP不会做这种事情.但是,将全局数据传递到每个函数中,无论是否需要,都会产生大量开销.这被称为"tramp数据",通常反映设计错误.如果这些东西真的是全球性的,那么它们是全球性的,假装它们不是,为了使你的代码"OOP",这是一个设计错误.