Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:同一体系结构层的成员功能访问建议_C++_Architecture - Fatal编程技术网

C++ C++;:同一体系结构层的成员功能访问建议

C++ C++;:同一体系结构层的成员功能访问建议,c++,architecture,C++,Architecture,我有以下四个等级: MyTop | ------------------- | | | BlockA BlockB BlockC BlockA、BlockB和BlockC是MyTop的组合对象BlockA提供了一个函数LookUpTable(),而BlockB和BlockC现在需要访问Bloc

我有以下四个等级:

                     MyTop
                       |
              -------------------
              |        |        |
            BlockA   BlockB   BlockC
BlockA
BlockB
BlockC
MyTop
的组合对象
BlockA
提供了一个函数
LookUpTable()
,而
BlockB
BlockC
现在需要访问
BlockA
拥有的查找表。
BlockB
BlockC
访问查找表的好做法(或至少是典型做法)是什么

我曾考虑将查找表本身作为一个类来实现,但循环表的内容与
BlockA
的初始化稍微耦合,将表与
BlockA
解耦可能不是一件小事(这仍然可行,但不是首选)。现在我的解决方案是将请求从
BlockB
BlockC
传递到
MyTop
,并让
MyTop
管理块之间的通信。但是,当有更多的块需要访问
BlockA
中的查找表时,这似乎不是处理问题的好方法。我想知道这是否是一个众所周知的问题,并且已经有了一个“最佳实践”解决方案。谢谢

我考虑实施 作为类本身查找表,但是 循环表的内容是 稍微加上 BlockA的初始化,它可能 将表解耦并非小事 来自BlockA(仍然可行,但是 不可取)


您不能简单地让BlocA初始化查找表所有者对象吗?它将是一个以BlocA为好友类的单例(如果在您的情况下是正确的),以确保它是唯一访问初始化(构造?)功能的类。

在当前机制下,BlockB和BlockC使用BlockA中提供的功能。我的理解是它与BlockA不同。它们不一样。p> BlockA、BlockB、BlockC继承了MyTop的方法

  • 所以LookUpTable()是MyTop的一个方法
  • 它应该访问仅在实例化BlockA时初始化的对象属性

  • 我不知道是否有一个通用的解决方案,但肯定有一个通用的建议:。

    据我所知,您正试图访问存储在查找表中的
    BlockA
    数据,然后对其执行一些操作。这违反了封装原则,只有持有数据的对象才能访问和修改数据。


    更好的方法是将查找表功能提取到类中,并为所有三个块添加公共方法。然后创建lookup table类的三个子类,并添加仅由特定块使用的方法(如果存在任何此类方法)。在
    BlockA
    中,
    BlockB
    BlockC
    使用这些类。与直接访问存储在
    BlockA
    中的查找表相比,这允许更松散的耦合。我认为该表是单例的。但是我如何将表的访问权限授予
    BlockB
    BlockC
    ?(我知道singleton模式,但我自己从未实现过。)只需提供一个静态函数来访问唯一实例。例如,请参见此实现: