0
我陷入困境,請幫我解決這個問題。執行檢測算法的通用接口
想法: 在不同的檢測算法(說圓,三角和矩形)之間有一個共同的接口。
class IDetectionInterface()
{
public:
virtual void PerformDetection(Image & InputImage, DetectionStruct & DetectionData, DetectionParam & DetParam) = 0;
virtual ~IDetectionInterface()
{
}
};
其中圖片和DetectionStruct是如下的結構:
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
如前所述,將會有許多可行的例子來說明如何製作泛型參數集。 –