it_sourceの実装中。
サンプリングデータのType(fixed float,float,double)を変えても動作するように実装を試みているところ。
昨日は下記の仕様を満たすために苦しんでいた。
・データオブジェクトと、ファイルローダは別クラスにする。
これは、1つのデータオブジェクトに複数のファイルローダをサポートできるようにするため。
(たとえばS3M形式のファイルもitデータオブジェクトに読み込めるようにするとか)
・ローダはデータオブジェクトのプライベート・メンバにアクセスできる(つまりローダはデータオブジェクトのfriend)。
データオブジェクトはデータメンバすべてをpublicにする必要はないが、データオブジェクト中にあるプライベートデータメンバにデータファイルから読み込む必要があるため、ローダクラスからはプライベートメンバにもアクセスさせる必要がある。
いろいろ悩んだ結果、
・ローダクラスをtemplateクラスにし、データオブジェクトのfriendにする。
・複数のローダクラスの実装は、テンプレートクラスの特殊化で行う。
方針で進めることにした。
以下実装途中ソース。
it_source.h
is_source.cpp