小编Lia*_*cey的帖子

我的程序结构/设计需要输入

我试图根据需要详细描述我正在构建的应用程序,所以我提前为这篇文章道歉!

我正在使用C++ Juce框架设计和构建一个相当大的音乐应用程序,简而言之就是接收OSC消息并将它们转换为音频和MIDI数据.该应用程序有三个"模式",每个模式定义OSC消息将产生什么样的声音.用户可以应用模式和另一组模式设置来定义每个OSC消息"触发"的声音.

下面是程序的类关系和层次结构的基本框图概述,或者至少是我在理论上想象它的方式.为了阐明Juce术语,"Component"类基本上是一个GUI对象/类,它在屏幕上显示内容并允许用户交互.

基本框图http://liamlacey.web44.net/images/Software_block_diagram.jpg

我是一位经验丰富的C程序员,但我对C++和OOP设计还不熟悉.我最了解它是否很好,但我遇到的主要问题是在构造所有类以获得正确的关系和层次结构方面,以便它们都可以正常通信,以便应用程序执行它需要做的事情.

以下是每个课程的简要说明:

  • OscInput - 此基类使用oscpack库来侦听OSC消息.只有一个类可以从此基类继承,因为如果同一UDP端口上有多个侦听器,应用程序将崩溃.

  • Main - 申请启动.从OscInput继承,以便每次收到OSC消息时,都会在此类中调用回调函数

  • MainWindow - 应用程序主文档窗口 - 默认为Juce应用程序.

  • MainComponent - 应用程序的主要/后台组件/ GUI - 默认为Juce应用程序.

  • Mode1Component/ Mode2Component/ Mode3Component-每个组件类的单个实例被调用并从MainComponent其用于由用户改变的每个OSC消息做什么的设置显示.

  • SubComponent1 - 从MainComponent调用并显示此组件类的单个实例.

  • SubComponent2 - 从SubComponent1调用并显示此组件类的48个实例.每个实例用于显示正在接收的不同OSC消息的值.

  • Mode1/Mode2/Mode3 - 从Main调用每个类的单个实例.每个类用于根据Settings类中的值/变量将OSC消息实际转换为音频或MIDI数据.

  • Settings - 此类的单个实例,用于存储控制从每个不同OSC消息生成的声音的设置.

我很高兴我将所有组件/ GUI类布局并以正确的方式连接.我也收到了传入的OSC消息.但是我不太确定如何实现Settings类实例的关系.以下是我需要帮助的关系:

  • Mode1,Mode2和Mode3的单个实例都需要从Setting类实例中检索值
  • MainComponent,Mode1Component,Mode2Component,Mode3Component的单个实例都需要将值发送到Settings类实例,以及从实例中检索值.
  • SubComponent2的所有48个实例都需要检索OSC消息

因此,我有以下问题:

  • 应该Settings从哪里调用类实例,以便上面提到的所有相关类实例都能与之通信?我只想要这个类的单个实例需要被许多其他类访问,所以它应该是全局,单例还是静态类?我一直在研究Singleton设计模式,这似乎是我正在寻找的,但我得到的印象是我应该避免它,如果我可以考虑替代方法.

  • 它应该Main是侦听OSC消息的类吗?如何让SubComponent2接收OSC消息以及Mode1,Mode2和Mode3类实例?

  • 是否应该从Main调用功能类(Mode1,Mode2和Mode3)?我正在努力保持所有功能和GUI代码分离,因为我正在处理GUI编程,而我正在处理应用程序的功能编程.

  • 任何人都可以发现我的程序设计模式中的任何重大缺陷吗?

任何帮助将不胜感激!

谢谢

c++ design-patterns structure osc

8
推荐指数
1
解决办法
1263
查看次数

在Xcode 4上增强库静态链接

我正在使用Xcode在OS X上使用Boost库.使用macports在我的系统上安装了Boost.我已经成功构建了我的应用程序,将我需要的3个boost库(例如,libboost_thread-mt.a)添加到Targets的Link Binary With Libraries列表中.但是,我需要静态链接这些库,以便应用程序可以在其他计算机上运行,​​而无需安装boost库.

我该怎么做?通过我的众多谷歌搜索我发现我可能需要添加'-static' - 我在Xcode中添加它?

xcode boost static-linking

5
推荐指数
1
解决办法
2573
查看次数

在C中初始化2D/3D数组的简便方法?

我想知道是否有一种简化方法来初始化C中的2D或3D数组,类似于以下语法:

int array[1024] = {[0 ... 1023] = 5};
Run Code Online (Sandbox Code Playgroud)

c arrays gcc initialization

3
推荐指数
1
解决办法
82
查看次数