G ++:模糊大小写的默认重载

时间:2014-04-29 01:53:56

标签: c++ g++ overloading

给出两个函数,如此

inline V2T<Int16> GS(float x, float y, int xOff, int yOff, Uint8 f = 0x00);
inline V2T<Int16> GS(float x, float y, int xOff, int yOff, int maxW = -1, int maxH = -1, Uint8 f = 0x00);

对于像GS(float,float,int,int)

这样的情况,重载明显不明确

有没有办法为这样的情况指定默认重载?除了GNU C ++编译器之外,我不必兼容任何东西,因为我已经使用了几个独特的约定。 理想情况下,像

inline V2T<Int16> GS(... , Uint8 f = 0x00) __default;
inline V2T<Int16> GS(... , int maxW = -1, int maxH = -1, Uint8 f = 0x00);

使编译器自动解析,支持第一个(__default)函数。

我所看到的所有问题都是针对新手第一次遇到这个错误,所以这可能已被回答但被埋没了。提前谢谢!

2 个答案:

答案 0 :(得分:6)

试试这个

inline V2T<Int16> GS(float x, float y, int xOff, int yOff, Uint8 f = 0x00);

// this one is not default one
template <class = void>
inline V2T<Int16> GS(float x, float y, int xOff, int yOff, int maxW = -1, int maxH = -1, Uint8 f = 0x00);

您可以看到结果here

答案 1 :(得分:3)

最明显的解决方法是

inline V2T<Int16> GS(float x, float y, int xOff, int yOff, Uint8 f = 0x00);
inline V2T<Int16> GS(float x, float y, int xOff, int yOff, int maxW, int maxH = -1, Uint8 f = 0x00);

因为您的意图是maxW实际上无法获得默认值。