#クラス概要
このクラスは、ValueTree内のプロパティの型付きラッパーとして機能します。
CachedValueを使用すると、選択したタイプのValueTreeプロパティを簡単に読み書きできます。
たとえば、CachedValue <int>を使用すると、プロパティをintとして読み取るか書き込むことができ、CachedValue<String>を使用すると、Stringとして処理できます。
また、使用されている型でそのコピーをキャッシュすることで、値への効率的なアクセスが可能になります。
CachedValueには、基本となるValueTreeに書き込むときに使用するオプションのUndoManagerを与えることができます。
ValueTree内のプロパティがない場合、CachedValueは自動的にオプションのデフォルト値を返します。これは、CachedValueを初期化するときに指定できます。
作成するには、コンストラクタを使用してCachedValueをValueTreeにアタッチするか、デフォルトのコンストラクタで初期化されていないCachedValueを作成し、後でreferTo()メソッドでアタッチします。
文字列、int、doubleなどの一般的な型は、簡単にvarに変換できますが、より複雑なカスタム型を使用する場合は、このクラスのVariantConverterのテンプレート特殊化を実装する必要があります型とValueTreeの内部変数を変換するために使用します。
#検証
#include "../JuceLibraryCode/JuceHeader.h"
//==============================================================================
int main (int argc, char* argv[])
{
juce::UndoManager undomanager(200, 30);
juce::ValueTree v(juce::Identifier("vertices"));
juce::CachedValue<int> ch_int( v,"int", &undomanager);
juce::CachedValue<float> ch_float(v, "int", &undomanager);
juce::CachedValue<double> ch_double(v, "double", &undomanager);
undomanager.beginNewTransaction();
ch_int.setDefault(10);
undomanager.beginNewTransaction();
ch_int.setValue(5, &undomanager);
juce::Logger::outputDebugString(juce::String(ch_int)); //-> 5
juce::Logger::outputDebugString(juce::String(ch_int.getDefault())); // ->10
//デフォルト値に戻す
ch_int.resetToDefault();
juce::Logger::outputDebugString(juce::String(ch_int)); //->10
//undo
undomanager.undo();
juce::Logger::outputDebugString(juce::String(ch_int)); //->10
undomanager.beginNewTransaction();
ch_int.setValue(5, &undomanager);
undomanager.beginNewTransaction();
ch_int.setValue(12, &undomanager);
undomanager.undo();
juce::Logger::outputDebugString(juce::String(ch_int)); //->5
juce::Logger::outputDebugString( ch_int.getPropertyID().toString() ); //->int
juce::Logger::outputDebugString(v.toXmlString());
return 0;
}
JUCE v5.2.0
5
10
10
10
5
int
<?xml version="1.0" encoding="UTF-8"?>
<vertices int="5"/>
#考察雑感
Valuetreeを構築するために記述上楽をするためのラッパーという解釈でいいのだろうか。
また、CachedValue<>で生成した変数に初期値が与えられていない場合はValueTreeのXML出力の際に出力されない。