C++ 函数参数:也接受空值

C++ 函数参数:也接受空值,c++,methods,parameters,arguments,C++,Methods,Parameters,Arguments,嗨,伙计们,我正在写一个函数来改变我的边框的颜色 void ChangeColor(D3DXVECTOR4 xColorLeft、D3DXVECTOR4 xColorRight、D3DXVECTOR4 xColorTop、D3DXVECTOR4 xColorBot) 现在一切都好了,但是我想给我的用户一些易用性,比如如果用空值调用ChangeColor,它不会改变任何东西 例如: ChangeColor(D3DXVECTOR4(0.0f,0.0f,0.0f,1.0f),NULL,NULL,NUL

嗨,伙计们,我正在写一个函数来改变我的边框的颜色

void ChangeColor(D3DXVECTOR4 xColorLeft、D3DXVECTOR4 xColorRight、D3DXVECTOR4 xColorTop、D3DXVECTOR4 xColorBot)

现在一切都好了,但是我想给我的用户一些易用性,比如如果用空值调用
ChangeColor
,它不会改变任何东西

例如:

ChangeColor(D3DXVECTOR4(0.0f,0.0f,0.0f,1.0f),NULL,NULL,NULL)

通过此函数调用,我将更改左边框的颜色,但由于在其他边框上调用NULL,我将保留它们的默认值。当我尝试这个调用时,我得到了一些关于重载方法包含
ints
的错误

在不使用任何方法(如
ChangeColorLeft
等)的情况下,这是否可行?如果是这样,我该怎么做


提前谢谢。

NULL和D3DXVECTOR4之间没有转换。您可以使用指向D3DXVECTOR4的指针作为参数,它们可以为NULL。

NULL和D3DXVECTOR4之间没有转换。您可以使用指向D3DXVECTOR4的指针作为参数,它们可以为NULL。

NULL和D3DXVECTOR4之间没有转换。您可以使用指向D3DXVECTOR4的指针作为参数,它们可以为NULL。

NULL和D3DXVECTOR4之间没有转换。您可以使用指向D3DXVECTOR4的指针作为参数,它们可以为NULL。

幸运的是,D3DXVECTOR4是一组四个浮点数,浮点数支持像NAN这样的神奇值。那么这个呢:

const D3DXVECTOR4 NoColor(NAN, NAN, NAN, NAN);
void ChangeColor(
    D3DXVECTOR4 xColorLeft = NoColor,
    D3DXVECTOR4 xColorRight = NoColor,
    D3DXVECTOR4 xColorTop = NoColor,
    D3DXVECTOR4 xColorBot = NoColor);

然后,您只需检查内部每个参数是否为NAN,如果是,则不要更改该参数。

幸好,D3DXVECTOR4是一组四个浮点数,浮点数支持像NAN这样的神奇值。那么这个呢:

const D3DXVECTOR4 NoColor(NAN, NAN, NAN, NAN);
void ChangeColor(
    D3DXVECTOR4 xColorLeft = NoColor,
    D3DXVECTOR4 xColorRight = NoColor,
    D3DXVECTOR4 xColorTop = NoColor,
    D3DXVECTOR4 xColorBot = NoColor);

然后,您只需检查内部每个参数是否为NAN,如果是,则不要更改该参数。

幸好,D3DXVECTOR4是一组四个浮点数,浮点数支持像NAN这样的神奇值。那么这个呢:

const D3DXVECTOR4 NoColor(NAN, NAN, NAN, NAN);
void ChangeColor(
    D3DXVECTOR4 xColorLeft = NoColor,
    D3DXVECTOR4 xColorRight = NoColor,
    D3DXVECTOR4 xColorTop = NoColor,
    D3DXVECTOR4 xColorBot = NoColor);

然后,您只需检查内部每个参数是否为NAN,如果是,则不要更改该参数。

幸好,D3DXVECTOR4是一组四个浮点数,浮点数支持像NAN这样的神奇值。那么这个呢:

const D3DXVECTOR4 NoColor(NAN, NAN, NAN, NAN);
void ChangeColor(
    D3DXVECTOR4 xColorLeft = NoColor,
    D3DXVECTOR4 xColorRight = NoColor,
    D3DXVECTOR4 xColorTop = NoColor,
    D3DXVECTOR4 xColorBot = NoColor);

然后您只需在内部检查每个参数是否为NAN,如果是,则不要更改该参数。

它应该与您的
NULL
值一起工作。。。 但我没有发现干净(特殊的默认颜色值更好):

void changeColorLeft(void*){/*什么都不做*/}
void changeColorRight(void*){/*什么都不做*/}
void changeColorTop(void*){/*什么都不做*/}
void changeColorBottom(void*){/*什么都不做*/}
void changeColorLeft(常量D3DXVECTOR4&color){/*实现*/}
void changeColorRight(常量D3DXVECTOR4&color){/*实现*/}
void changeColorTop(const D3DXVECTOR4&)color{/*实现*/}
void changeColorBottom(const D3DXVECTOR4&color){/*实现*/}
模板
void ChangeColor(T1&&xColorLeft、T2&&xColorRight、T3&&xColorTop、T4&&xColorBot)
{
changeColorLeft(xColorLeft);
changeColorRight(xColorRight);
changeColorTop(xColorTop);
更改颜色底部(xColorBot);
}

它应该与您的
NULL
值一起使用。。。 但我没有发现干净(特殊的默认颜色值更好):

void changeColorLeft(void*){/*什么都不做*/}
void changeColorRight(void*){/*什么都不做*/}
void changeColorTop(void*){/*什么都不做*/}
void changeColorBottom(void*){/*什么都不做*/}
void changeColorLeft(常量D3DXVECTOR4&color){/*实现*/}
void changeColorRight(常量D3DXVECTOR4&color){/*实现*/}
void changeColorTop(const D3DXVECTOR4&)color{/*实现*/}
void changeColorBottom(const D3DXVECTOR4&color){/*实现*/}
模板
void ChangeColor(T1&&xColorLeft、T2&&xColorRight、T3&&xColorTop、T4&&xColorBot)
{
changeColorLeft(xColorLeft);
changeColorRight(xColorRight);
changeColorTop(xColorTop);
更改颜色底部(xColorBot);
}

它应该与您的
NULL
值一起使用。。。 但我没有发现干净(特殊的默认颜色值更好):

void changeColorLeft(void*){/*什么都不做*/}
void changeColorRight(void*){/*什么都不做*/}
void changeColorTop(void*){/*什么都不做*/}
void changeColorBottom(void*){/*什么都不做*/}
void changeColorLeft(常量D3DXVECTOR4&color){/*实现*/}
void changeColorRight(常量D3DXVECTOR4&color){/*实现*/}
void changeColorTop(const D3DXVECTOR4&)color{/*实现*/}
void changeColorBottom(const D3DXVECTOR4&color){/*实现*/}
模板
void ChangeColor(T1&&xColorLeft、T2&&xColorRight、T3&&xColorTop、T4&&xColorBot)
{
changeColorLeft(xColorLeft);
changeColorRight(xColorRight);
changeColorTop(xColorTop);
更改颜色底部(xColorBot);
}

它应该与您的
NULL
值一起使用。。。 但我没有发现干净(特殊的默认颜色值更好):

void changeColorLeft(void*){/*什么都不做*/}
void changeColorRight(void*){/*什么都不做*/}
void changeColorTop(void*){/*什么都不做*/}
void changeColorBottom(void*){/*什么都不做*/}
void changeColorLeft(常量D3DXVECTOR4&color){/*实现*/}
void changeColorRight(常量D3DXVECTOR4&color){/*实现*/}
void changeColorTop(const D3DXVECTOR4&)color{/*实现*/}
void changeColorBottom(const D3DXVECTOR4&color){/*实现*/}
模板
void ChangeColor(T1&&xColorLeft、T2&&xColorRight、T3&&xColorTop、T4&&xColorBot)
{
changeColorLeft(xColorLeft);
changeColorRight(xColorRight);
changeColorTop(xColorTop);
更改颜色底部(xColorBot);
}

您尝试过默认参数吗?默认参数是什么意思?
ChangeColorLeft
的优点是意图明确,否则您必须记住顺序(没有顺序是完美的/直观的))您尝试过默认参数吗?什么