私はプロジェクトのデータパーサーを開発中です。異なる引数セットを持つ単一のクラスを実装する
タイプ1: SB0のhardrectilinear 4(0、0)、(0、82)(199、82)(199、0)
Iオブジェクトの二つの異なるタイプを含むことができるファイルを解析しなければなりませんType-1は、BlockID、BlockType、number_of_edges、lowerleft、lowerright、upperleft、upperrightの属性を持つクラスブロックとして格納する必要があります。
タイプ2:BLOCKID、BlockType、領域、min_aspectRatio、max_aspectRatio:タイプ2 24045 0.300 3.000
softrectangular SB1は、次の属性を持つ、クラスブロックとして格納されなければなりません。
属性 "BlockType"に応じて異なる引数セットを使用して、 "block"という単一のクラスを構築できますか?私はパーサーを構築しましたが、sstreamを使用して各BlockTypeに対して2つの異なるクラスを使用しました。
解析対象のテキストファイルにタイプ2しか含まれていない場合は、パーサの実装を示しました。どのように私はこれを1つのクラスを使用して行うことができますか?
SoftBlock.h:
#ifndef SOFTBLOCKLIST_H_
#define SOFTBLOCKLIST_H_
#include <string>
#include <vector>
#include "SoftBlock.h"
#include <fstream>
class SoftBlockList {
public:
SoftBlockList(std::string input_file);
std::vector<SoftBlock> get_softblocklist();
private:
std::vector<SoftBlock> softblocklist;
};
#endif /* SOFTBLOCKLIST_H_ */
SoftBlock.cpp:
#include "SoftBlockList.h"
using namespace std;
SoftBlockList::SoftBlockList(string input_file) {
ifstream filehandle;
filehandle.open(input_file.c_str());
string temp;
while(filehandle.good()){
getline(filehandle, temp);
SoftBlock block(temp);
softblocklist.push_back(block);
}
filehandle.close();
}
vector<SoftBlock> SoftBlockList::get_softblocklist(){return
softblocklist;}
"クラスブロック"とはどういう意味ですか?達成したいことを示すコードを提供してください。 –
テンプレートのユースケースのように聞こえるかもしれません。 –
私はブロックと呼ばれるクラスを意味しました。私は質問を編集しました。基本的に、パーサは、上記の2つの異なるタイプの行を "ブロック"と呼ばれる単一のクラスに解析する必要があります。しかし、属性 "BlockType"に応じて、それは異なる属性を持たなければならない。 –