0

さまざまなデータ型で特定の画像を作成する必要があるプログラムを書いています。それが最良の方法であるため、私はテンプレートを使用しています。プログラムは、上部にマジック ナンバー (P11、P12、P13、P14) を持つ画像ファイルを読み込みます。マジック ナンバーの下には、幅、高さ、および最大値を指定する 3 つの数値があります。ファイルの残りの部分には (幅*高さ) の数値が含まれており、これらの数値はすべて 0 と最大値の範囲内である必要があります。

ファイルの例を次に示します。

P11
3 4
512

78 90 102
23 489 209
123 423 1
100 231 134

これは単なる例であり、ファイルは通常数千行の長さであることに注意してください。

このプログラムでは、ヘッダーのマジック ナンバーと最大値を確認する必要があります。これらの値は、使用するデータ型を決定するため、それをテンプレートにプラグインするだけです。問題は、テンプレートが次のように文字列をパラメーターとして使用できないことです。

string dataType = inFile.getType(vector of numbers);
Image<dataType> img1 (Rows,columns,numbers);

説明する必要がある 10 のケースがあり、各ケースは次のようになります。 > マジック ナンバーが P11 で、最大値が 256 未満の場合、データ型は「unsigned char」です。マジック ナンバーが P11 で、最大値が 256 より大きく 65536 より小さい場合、画像のデータ型は「unsigned short」になります。マジックナンバーと最大値に応じて、これを実行します。したがって、上の画像では、「unsigned short」のデータ型になります。

私がこれまでに持っているのは、各ケースを説明し、マジック ナンバーと最大値に関してデータ型がどうあるべきかを示す文字列を返すメソッドです。唯一のことは、私のテンプレートが文字列を取って正しいデータ型にすることができないということです。

私が思いついた唯一の解決策は、メインで if-else ステートメントを実行することです。複数の画像がある場合、if-elseステートメントが2倍になるため、非常に面倒です。ここに例があります

if(dataType == "unsigned char"){
   Image<unsigned char> img1 (rows, columns, numbers);

}
else if(dataType == "unsigned short"){
   Image<unsigned short> img1 (rows, columns, numbers);   

}

他の8つのケースについても同様です...メソッドからデータ型を返し、それをテンプレート引数に直接入れることができる方法はありますか? いくつかのコードを提出することはできますが、他の学生に簡単な方法を探してほしくないので、多くは提出できません。見るのに最も有益なものを教えてください。変更できます。高度なヘルプをありがとう。

4

1 に答える 1