覚えておくとたまに役立つ列挙体と整数,文字列間の相互型変換
#基本
列挙体のデータは符号無し整数型です。
通常の整数と異なる点はタイプ定義の領域に項目名のリストがある点です。
また、未定義の値を許容しないので範囲外の値は最後の項目に強制されるようです
文字列→列挙体変換は厳密に文字列が一致している必要があります。
列挙体の項目と一致する文字列が来なかった場合は文字列からスキャン関数でエラーが発生します。
文字列→列挙体 その2
文字列からスキャン関数でスマートに出来るのでお遊びでしかないですが…何かのヒントになれば。
#応用
##高機能なシーケンスストラクチャのようなもの
「ただ何かを順番に実行したいだけ」という時にスタックシーケンスストラクチャの代わりになります。
以下の点でスタックシーケンスストラクチャよりも優れています。
・コードが自己説明的
・列挙体の定義で順番を入れ替えるだけで実行順序の入れ替えが可能
・シフトレジスタでデータを次のステップに受け渡し出来る
・シーケンスの途中でエラーが発生した場合にブレイク出来る
但し、これはある程度理解している人が触る前提のコードかもしれません。
型変換の挙動を理解してる人が触る分には良いですが、U16へのキャストを外されたり、列挙体の型を変更されたりすると、同じケースを複数回実行したり、意図したケースが実行されない等の困った症状に繋がります。
##列挙体の項目名一覧を取得する
基本は見ての通り列挙体→文字列です。範囲外の値からキャストしても範囲内に強制されることを利用して最後の項目でブレイクしています。
ブロックダイアグラム内の列挙体定数でも項目名を取得することが出来ます。
(フロントパネルに配置している列挙体ならプロパティノードで項目名の一覧を取得出来ます)