【发布时间】:2015-03-15 22:32:37
【问题描述】:
由于我的上一个问题中包含太多代码,因此我尝试以最简单的示例来说明我正在尝试做的事情。以这个为例,..
#include <iostream>
using namespace std;
class String
{
public:
private:
};
class ClassTwo
{
public:
int memberVariable;
private:
};
class ClassOne
{
public:
ClassOne (ClassTwo&, String&);
~ClassOne();
private:
ClassTwo& classTwoReference;
String& stringReference;
};
ClassOne::ClassOne (ClassTwo& two, String& string)
: classTwoReference (two), stringReference (string)
{
two.memberVariable = 3;
}
ClassOne::~ClassOne()
{
}
int main()
{
String stringObject;
ClassTwo classTwoObject;
ClassOne classOneObject (classTwoObject, stringObject);
}
在 JUCE(我用来编写 VST 插件的 API)中,有一个字符串类,JUCE 将其命名为“String”。我不确定构造函数到底做了什么,但你可以使用类似的东西来创建一个 String 对象。
String newString("string");
在我的例子中,ClassTwo 是 AudioProcessor 类,它有一个公共成员变量,我可以像这样从 ClassOne 访问它。
two.memberVariable = 3;
就我而言,ClassOne 是我在 GUI 中使用的自定义组件(我将其命名为 PixelSlider)。它使用滑块侦听器来检查滑块的状态并修改 ClassTwo(AudioProcessor) 中的成员变量。我可以使用上面的方法很好地做到这一点,但问题是我想根据需要创建尽可能多的 ClassOne(PixelSlider) 对象。我想向他们传递一个 String 对象,告诉他们要修改 ClassTwo(AudioProcessor) 的哪个成员变量。从逻辑上讲,这可以通过传递对 String 对象的引用来完成,该对象的字符串值与 ClassTwo 成员变量的名称相同。像这样,...
ClassOne::ClassOne (ClassTwo& two, String& string)
: classTwoReference (two), stringReference (string)
{
two.(string) = 3;
}
这在 JUCE 中不起作用,但谁能告诉我一种方法来完成这项工作,而无需创建一堆几乎与修改不同 ClassTwo(AudioProcessor) 成员变量的 ClassOne(PixelSlider) 完全相同的不同类?
【问题讨论】:
-
“这显然在 JUCE 中不起作用” 这没有什么明显的。另请注意,您应该编辑和改进最后一个问题,而不是发布另一个问题。
-
所以你说它应该可以工作?另外,我删除了我的最后一个问题。改进它会完全改变它,所以我只是发布了一个新的并删除它。
-
我说对我来说没有什么明显的为什么不应该这样做。如果它对您不起作用,您应该详细说明究竟是什么不起作用。
-
@SteveyYarusinsky 您仍然错过了解释什么不起作用。
-
有很多解决方案,这真的取决于整体情况。您的示例太简单/太小,无法清楚地看到您要做什么。发布的答案是其中之一,但并不总是正确的答案。