私は状況に立ち往生しています。一般的なインターフェイスを実行する検出アルゴリズム
考え: 異なる検出アルゴリズム(Say Circle、Triangle、Rectangle)の間で共通のInterfaceを持つこと。 画像とDetectionStructは、以下のような構造である
class IDetectionInterface()
{
public:
virtual void PerformDetection(Image & InputImage, DetectionStruct & DetectionData, DetectionParam & DetParam) = 0;
virtual ~IDetectionInterface()
{
}
};
:検出アルゴリズムのパラメータが異なるよう
struct Image
{
unsigned char * pImageData;
int Width;
int Height;
};
struct DetectionStruct
{
Rect BoundingBox;
DectionType DetType;
};
struct Rect
{
int x;
int y;
int width;
int height;
};
enum DectionType
{
Circle = 0,
Triangle = 1,
Rectangle = 2
}
問題私にとっては、DetectionParamのことです。たとえば、
struct RectDetectionParam
{
int param1;
float param2;
double param3;
};
struct TriDetectionParam
{
float param1;
float param2;
double param3;
int param4;
};
struct CirDetectionParam
{
int param1;
float param2;
bool param3;
int param4;
float param5;
};
私は上記のように共通のインターフェースを得ることができます。
注:私は、最も簡単な解決策である一つの構造体にすべてのパラメータを入れたくありませんが、アルゴリズムを変更してそれぞれのパラメータが変更され、再度構造体を書き直す必要があるという欠点があります。
そしてOfcourceはい、私はあなたがパラメータは、一般的な設定にするために区別組合を作成することができ、あなたの例に基づいてインターフェイス(抽象クラス)の実装に事前
その問題を解決するために多くのアプローチがあります。区別された 'union'を使うことは、パラメータ名がキーとして使われる一般的な' std :: map 'の使い方の一つです。 –
私に例を挙げてもらえますか? – Barry
前述のように、ジェネリックパラメータセットの作成方法は多くあります。 –