を処理するデータを記述するとき、私はプログラミングに新しいですし、あなたの経験を必要とする問題に遭遇:私はデータのリストを持っているint型/列挙型
を。各データにはフォーマットがあります。 私は、データリストをスキャンし、そのフォーマットに従ってデータツリーを構築するBuilder Builderを持っています。 1.各データをint/enum値でバインドして、それが何であるかを記述し、Builderがint/enum値を調べて決定できるようにします。トークンを処理するためにはどの関数を使用すべきです。 2.各データをインターフェイスを実装する仮想関数でバインドし、仮想関数を呼び出してデータを処理します。
2番目の方法が優れているように聞こえます。しかし、私はそれにもいくつかの問題があります。 1.データをデータに変換するコードを埋め込んでも問題ありませんか?いつかBuilderクラスを変更する必要がある場合は、各データクラスを変更する必要がありますか? 2.いくつかのシナリオでは、協力者に2つのデータが必要です。方法2でこれを行うのは難しいです。
どちらが良いか教えてください。
方法1:
struct FormatedData
{
std::string data;
int format;
};
class Builder
{
public:
void build(std::list<FormatedData> *data_list)
{
for (auto it : *data_list)
{
switch (it.format)
{
case:
do something;
break;
default:
do something;
break;
}
}
}
};
方法2:
class Builder;
struct IIterface
{
virtual void dosomething(Builder*) = 0;
};
class FormatedData :public IIterface
{
std::string data;
int format;
void dosomething(Builder*) override
{
....
}
};
class Builder
{
public:
void build(std::list<IIterface*> *data_list)
{
for (auto it : *data_list)
{
it->dosomething(this);
}
}
};