gpt4 book ai didi

c++ - 使用类引用修改另一个类中的公共(public)成员

转载 作者:行者123 更新时间:2023-11-30 05:48:56 33 4
gpt4 key购买 nike

由于我的上一个问题中包含了太多代码,因此我尝试用最简单的示例来说明我正在尝试做的事情。以此为例,..

#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 类,它有一个公共(public)成员变量,我可以像这样从 ClassOne 访问它。

two.memberVariable = 3;

在我的例子中,ClassOne 是我在 GUI 中使用的自定义组件(我将其命名为 PixelSlider)。它使用 slider 监听器来检查 slider 的状态并修改 ClassTwo(AudioProcessor) 中的成员变量。我可以使用上面的方法很好地做到这一点,但问题是我想根据需要创建尽可能多的 ClassOne(PixelSlider) 对象。我想向他们传递一个 String 对象,告诉他们要修改 ClassTwo(AudioProcessor) 的哪个成员变量。从逻辑上讲,这将通过传递对具有与 ClassTwo 成员变量名称相同的字符串值的字符串对象的引用来完成。像这样,...

ClassOne::ClassOne (ClassTwo& two, String& string)
: classTwoReference (two), stringReference (string)
{
two.(string) = 3;
}

这在 JUCE 中不起作用,但是谁能告诉我一种方法来完成这项工作,而不必创建一堆几乎完全像 ClassOne(PixelSlider) 来修改不同的 ClassTwo(AudioProcessor) 成员变量的不同类?

最佳答案

如果我理解正确,您正试图在运行时将 PixelSlider 目标绑定(bind)到 AudioProcessor 的成员,正如您所发现的那样,它不能按照您建议的方式完成( two.(string) = 3 )。实现此绑定(bind)的一种方法是使用命令模式 (http://sourcemaking.com/design_patterns/command/cpp/2)。

AudioProcessor 可以为每个可修改的属性公开这些命令对象的集合......

AudioProcessorCommand
AudioProcessor::GetCommandByName(String const& properyName) const
{
...
}

... 您可以将其传递给 PixelSlider 的构造函数。类似...

PixelSlider::PixelSlider(AudioProcessorCommand& command)
: command_{command}
{
...
}

PixelSlider 的值发生变化时,您将调用命令 ...

command_(this->value_);

关于c++ - 使用类引用修改另一个类中的公共(public)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27998892/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com