是否有可能以某種方式使函數(C++ 11),它將接受不同的參數取決於第一個? 比方說,我需要以下行爲:C++ 11函數參數
enum TypeFill{Solid, Gradient1, Gradient2};
void fill(const TypeFill t, Type1 param1 = NULL, Type2 param2 = NULL){
if (t == Solid){
fillSolid(param1);
} else if (t == Gradient1){
fillGradient1(param1, param2);
} else if (t == Gradient2){
fillGradient2(param1, param2);
}
}
private:
fillSolid(Brush b){};
fillGradient1(Color c1, Color c2){};
fillGradient2(Color c1, Color c2){};
調用示例:
fill(Solid, Brush(1.0, 0.0, 0.0)){};
fill(Gradient1, Color(1.0, 0.0, 0.0), Color(1.0, 1.0, 0.0)){};
fill(Gradient2, Color(1.0, 0.0, 0.0), Color(1.0, 1.0, 0.0)){};
如果這可能只是懷疑。我覺得可能是一些可以做到與enable_if和模板特,但可能不...
什麼是'枚舉TypeFill;'?...和其他代碼中,我不知道你想要達到什麼目的。 –
Nawaz
因爲在編譯時需要知道填充類型,所以像這樣比'solidFill(Brush)','gradientFill(Color,Color)'等更好嗎?當然,有很多方法可以公開這樣的API;我只是選擇最明顯的簡單案例作爲參考。 – Jon
@Nawaz:他們想根據第一個參數的值(這是不可能的,因此我們正在談論一些道德等價物)允許或不允許「fill」的不同簽名。 – Jon