是否有可能以某种方式使函数(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