NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

ダイナミックディスパッチのサンプル

解決済み
解決策を見る

オブジェクト指向のダイナミックディスパッチのサンプルを作ったので参考までに。
今回はLV2013バージョンです。mainはTestです。

これはNIのコーステキストにある継承関係を説明した図をプログラムしてみました。

継承の関係は
哺乳類クラス(・・・)
←ヒトクラス(しゃべる)
←ネコクラス(・・・)

ネコクラス
←家ネコクラス(にゃー)
←大型ネコクラス(ガオ)

大型ネコクラス
←トラクラス(ガオ)
←ライオンクラス(ガオ)

クラスによって鳴き方が違います。(同じものもあります。)

わかりやすくするために、ボイスロイドでwavファイルを作って鳴かせています。

(少しマニアックですが。)
子にメソッドがなく、親にメソッドがない場合、その上の親のメソッドが呼び出されます。

ファクトリーメソッドをつけたプログラムがFMTestです。
親クラスのMammalを呼び出そうとするとクラスがないとエラーが出るのですが、ほかの子クラスの呼び出しは問題ないようです。
この理由がよくわかりません。アドバイスをいただけたありがたいです。

また今回は、しゃべらせるためにボイスロイドで作成したファイルを呼び出していますが、
できれば、音声合成(読み上げ)の外部ライブラリファイルを呼び出して、その場で音声を作れたらよいなとも思っています。
どなたか、これについもアドバイスいただければありがたいです。

メッセージ1/3
5,013件の閲覧回数
解決策
トピック作成者Gyutanが受理

とても勉強になります。ありがとうございます。

 

フォルダ名の「Mammal」の4文字目の文字が2バイト文字の「m」になっているようですね。私の手元ではこれで動作するようになりました。

 

今後とも宜しくお願いします。

0 件の賞賛
メッセージ2/3
4,968件の閲覧回数

ミスを見つけていただきありがとうございます。

大変助かりました。

 

Testでは、直接クラス定数(インスタンス)をケースの中においていたので、フォルダー名は関係なかったのですが、

ファクトリーメソッド(FMTest)では、フォルダー名を使っていたので、クラス名とフォルダーの名前が違っていたために問題が生じたようですね。

クラスを作るときに、プロジェクトホルダーにあるクラス名と保存するフォルダー名は間違えないように作らないといけないですね。

 

まだ使ってはいないのでどの程度できるかわかりませんが、

クラスの設計ができているれば、

StarUMLを使えば、自動でコードが生成されるので、このようなミスは減るかもしれません(?)。

http://sine.ni.com/nips/cds/view/p/lang/ja/nid/209296

http://staruml.sourceforge.net/en/

 

利用されている方で、どんな風に利用されているかや、使い勝手などを教えていただければありがたいです。

よろしくお願いします。

0 件の賞賛
メッセージ3/3
4,964件の閲覧回数