使一个函数比另一个函数具有更高的优先级
Make a function has higher precedence than another
所以我有一个函数:
void foo(char a = 'A', int b = 0)
{
// code
}
我还有一个:
void foo(int b = 0, char a = 'A')
{
//code
}
然后如果我调用foo()
,它会return一个错误,因为编译器不能决定调用哪个函数。那么我可以创建一个优先级高于另一个的函数吗?所以如果我调用 foo()
那么编译器选择哪一个?
如果在 overload resolution 期间发现两者同样可行,则无法对一个函数或另一个函数应用隐式偏好。
如果您遇到这种情况,最好的办法是将两个函数包装在单独的名称空间中,这样您就可以选择通过名称空间限定引用访问哪个函数。代码的其他部分仍然可以将两者带入它们自己的查找领域,以便与 using
语句一起使用,只要调用是明确的,它们就可以以这种方式使用,程序员回退到显式无法解决歧义时的名称空间限定。
您可能想在这里使用函数重载:
void foo(char a, int b = 0)
{
// code
}
void foo(int b, char a = 'A')
{
//code
}
void foo()
{
foo(0); // Or 'foo('A');', depends on which overload you want to give priority
}
编辑:或者您可以从其中一个重载中删除第一个默认参数:
// Makes the compiler select the first overload when doing 'foo()'
void foo(char a = 'A', int b = 0)
{
// code
}
void foo(int b, char a = 'A')
{
//code
}
或者:
// Makes the compiler select the second overload when doing 'foo()'
void foo(char a, int b = 0)
{
// code
}
void foo(int b = 0, char a = 'A')
{
//code
}
所以我有一个函数:
void foo(char a = 'A', int b = 0)
{
// code
}
我还有一个:
void foo(int b = 0, char a = 'A')
{
//code
}
然后如果我调用foo()
,它会return一个错误,因为编译器不能决定调用哪个函数。那么我可以创建一个优先级高于另一个的函数吗?所以如果我调用 foo()
那么编译器选择哪一个?
如果在 overload resolution 期间发现两者同样可行,则无法对一个函数或另一个函数应用隐式偏好。
如果您遇到这种情况,最好的办法是将两个函数包装在单独的名称空间中,这样您就可以选择通过名称空间限定引用访问哪个函数。代码的其他部分仍然可以将两者带入它们自己的查找领域,以便与 using
语句一起使用,只要调用是明确的,它们就可以以这种方式使用,程序员回退到显式无法解决歧义时的名称空间限定。
您可能想在这里使用函数重载:
void foo(char a, int b = 0)
{
// code
}
void foo(int b, char a = 'A')
{
//code
}
void foo()
{
foo(0); // Or 'foo('A');', depends on which overload you want to give priority
}
编辑:或者您可以从其中一个重载中删除第一个默认参数:
// Makes the compiler select the first overload when doing 'foo()'
void foo(char a = 'A', int b = 0)
{
// code
}
void foo(int b, char a = 'A')
{
//code
}
或者:
// Makes the compiler select the second overload when doing 'foo()'
void foo(char a, int b = 0)
{
// code
}
void foo(int b = 0, char a = 'A')
{
//code
}