大家好我正在写一个改变边界颜色的功能。
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
等任何方法的情况下实现?如果是这样,我该怎么做?
提前谢谢。
答案 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。