C ++访问需要初始化的静态结构

时间:2018-08-23 09:20:11

标签: c++ static singleton

我有这个结构:

struct Parameters {
    int x;
    double y;
    .
    .
    .
    float z;
}

和一个Matrix类。

此结构应通过从文件中读取进行初始化,并保持const到最后。

如何从程序中的所有类访问那些? 我设法完成了一个单例,但是感觉不对。

我也尝试使用static,但是失败了,因为我必须以某种方式初始化字段

我想要类似的东西

class Consts {
    Parameters _params;
    Matrix _k;
} 

并能够像这样访问它:

class OtherClass {
public:
    void foo() {
        Matrix a = Consts::_k;
        int b = Consts::_params.x;
    }
}

1 个答案:

答案 0 :(得分:1)

实际上,辛格尔顿在很多地方都感到奇怪,see here是开始阅读该书的要点。但是随后considerable arguments也被答复。简而言之,底线可能是brought here,即仅当您拥有应该管理单个共享资源时, 。因此,如果所讨论的资源不必具有一个以上的实例表示形式,并且该实例要负责管理该资源,那么Singleton可能是解决之道。

现在,您的ParametersConsts类似乎(不需要其他信息)看起来像需要管理。此外,仅使用Singleton以使您可以在系统中全局访问其界面不是一个好主意。那是因为您很快就会失去对系统依赖的位置的跟踪(取决于哪个部分),因此将来对其进行的任何更改都可能会导致难以预料的错误和缺陷。

是否有任何理由不仅仅制作Consts的单个实例,然后将其传递给需要它的任何人,从而暴露依赖关系而不是隐藏依赖关系?

例如,foo()可以这样定义:

void foo(const Consts& consts) {
    Matrix a = consts._k;
    int b = consts._params.x;
}

或者您的OtherClass类可以在其CTor中接收它,并将其存储为其访问方法的成员:

class OtherClass {
private:
    const Consts& mConsts;

public:
    OtherClass(const Consts& consts)
    : mConsts(consts)
    {}

    void foo() {
        Matrix a = mConsts._k;
        int b = mConsts._params.x;
    }
}