1

私の最後の質問にはコードが多すぎたので、私がやろうとしていることの最も簡単な例を作ろうとしました. これを例にとると..

#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);
}

私が VST プラグインのコーディングに使用している API である JUCE には、JUCE が「String」と名付けた文字列クラスがあります。コンストラクターが何をするのか正確にはわかりませんが、このようなものを使用して String オブジェクトを作成できます。

String newString("string");

私の場合の ClassTwo は、このように ClassOne からアクセスできる public メンバー変数を持つ AudioProcessor クラスです。

two.memberVariable = 3;

私の場合の ClassOne は、GUI で使用しているカスタム コンポーネント (PixelSlider と名付けました) です。スライダー リスナーを使用してスライダーの状態を確認し、ClassTwo(AudioProcessor) のメンバー変数を変更します。上記の方法を使用してこれをうまく行うことができますが、必要な数の ClassOne(PixelSlider) オブジェクトを作成したいという問題があります。ClassTwo(AudioProcessor) のどのメンバー変数を変更するかを伝える String オブジェクトを渡したいと思います。論理的には、これは、ClassTwo メンバー変数の名前と同じ文字列値を持つ String オブジェクトへの参照を渡すことによって行われます。このような、...

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

これは JUCE では機能しませんが、さまざまな ClassTwo(AudioProcessor) メンバー変数を変更する ClassOne(PixelSlider) とほぼ同じように、さまざまなクラスの束を作成することなく、これを行う方法を誰か教えてもらえますか?

4

1 に答える 1

1

私が正しく理解している場合、実行時にPixelSliderターゲットを のメンバーにバインドしようとしAudioProcessorていますが、これは、あなたが提案した方法では実行できません ( two.(string) = 3)。このバインディングを実現する 1 つの方法は、コマンド パターン ( 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_);
于 2015-01-17T11:47:00.313 に答える