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
的优点是意图明确,否则您必须记住顺序(没有顺序是完美的/直观的))您尝试过默认参数吗?什么