函数参数:也接受空值

时间:2013-11-07 11:25:30

标签: c++ methods parameters arguments

大家好我正在写一个改变边界颜色的功能。

void ChangeColor(D3DXVECTOR4 xColorLeft, D3DXVECTOR4 xColorRight, D3DXVECTOR4 xColorTop, D3DXVECTOR4 xColorBot);

现在这一切都很好,但是我想给我的用户一些易用性,例如如果用NULL值调用ChangeColor,它就不会改变任何东西。

示例:

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

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

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

提前谢谢。

3 个答案:

答案 0 :(得分:2)

令人高兴的是,D3DXVECTOR4是一组四个浮点数,浮点数支持像NAN这样的神奇值。那怎么样:

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

然后你只需检查每个参数是否为NAN,如果是,则不要更改那个参数。

答案 1 :(得分:1)

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

void changeColorLeft(void*) { /* Do nothing */ }
void changeColorRight(void*) { /* Do nothing */ }
void changeColorTop(void*) { /* Do nothing */ }
void changeColorBottom(void*) { /* Do nothing */ }

void changeColorLeft(const D3DXVECTOR4& color) { /* implementation */ }
void changeColorRight(const D3DXVECTOR4& color) { /* implementation */ }
void changeColorTop(const D3DXVECTOR4&) color{ /* implementation */ }
void changeColorBottom(const D3DXVECTOR4& color) { /* implementation */ }

template<typename T1, typename T2, typename T3, typename T4>
void ChangeColor(T1&& xColorLeft, T2&& xColorRight, T3&& xColorTop, T4&& xColorBot)
{
    changeColorLeft(xColorLeft);
    changeColorRight(xColorRight);
    changeColorTop(xColorTop);
    changeColorBottom(xColorBot);
}

答案 2 :(得分:0)

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