0

大家好,我目前正在编写一个更改边框颜色的函数。

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

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

例子:

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

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

如果不采取任何方法等,这可能ChangeColorLeft吗?如果是这样,我会怎么做?

先感谢您。

4

3 回答 3

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,如果是,请不要更改该参数。

于 2013-11-07T11:33:15.260 回答
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);
}
于 2013-11-07T11:48:49.200 回答
0

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

于 2013-11-07T11:31:07.443 回答