2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Juce CachedValue< Type >

Last updated at Posted at 2017-12-21

#クラス概要

このクラスは、ValueTree内のプロパティの型付きラッパーとして機能します。

CachedValueを使用すると、選択したタイプのValueTreeプロパティを簡単に読み書きできます。
たとえば、CachedValue <int>を使用すると、プロパティをintとして読み取るか書き込むことができ、CachedValue<String>を使用すると、Stringとして処理できます。

また、使用されている型でそのコピーをキャッシュすることで、値への効率的なアクセスが可能になります。

CachedValueには、基本となるValueTreeに書き込むときに使用するオプションのUndoManagerを与えることができます。

ValueTree内のプロパティがない場合、CachedValueは自動的にオプションのデフォルト値を返します。これは、CachedValueを初期化するときに指定できます。

作成するには、コンストラクタを使用してCachedValueをValueTreeにアタッチするか、デフォルトのコンストラクタで初期化されていないCachedValueを作成し、後でreferTo()メソッドでアタッチします。

文字列、int、doubleなどの一般的な型は、簡単にvarに変換できますが、より複雑なカスタム型を使用する場合は、このクラスのVariantConverterのテンプレート特殊化を実装する必要があります型とValueTreeの内部変数を変換するために使用します。

#検証

test.cpp


#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出力の際に出力されない。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?