我试图弄清楚我如何能够传递默认的结构值"对于没有初始化结构的函数,这就是我现在所拥有的:
struct Color3i
{
Color3i(): r(255), g(255), b(255) { }
int r, g, b;
};
void CCore::Color(Color3i color)
{
double red, green, blue;
red = color.r / 255.0f;
green = color.g / 255.0f;
blue = color.b / 255.0f;
glColor3f(red,green,blue);
}
Color3i defaultColor;
Core.Color(defaultColor);
我尝试做的事情看起来像这样,但这显然不起作用:
Core.Color(Color3i defaultColor);
如果不使用Color3i defaultColor初始化它,我如何将结构传递给函数;这可能吗?
很抱歉,如果之前有人询问过,但我尝试搜索互联网,但我找不到任何东西(也许我使用错误的关键字进行搜索)
答案 0 :(得分:1)
你应该能够做到这一点:
Core.Color(Color3i());
也就是说,调用默认构造函数来初始化一个新实例,然后传递它。
答案 1 :(得分:1)
有几种方法可以传递您希望颜色为默认值的信息。最简单的一个已在评论中给出:
Core.Color(Color3i())
如果希望代码更短,可以在调用的函数参数中设置默认值:
void CCore::Color(Color3i color = Color3i()) { ... }
....
Core.Color(); //no argument = default
如果您想要更具描述性,可以在Color
中创建一个充当构造函数的静态函数:
struct Color3i {
Color3i(): r(255), g(255), b(255) { }
int r, g, b;
static Colo3i defaultColor() { return Color3i(); }
};
...
Core.Color(Color3i::defaultColor());
最后,如果要控制可以使用默认颜色的上下文,可以创建一个新的虚拟枚举类型并重载函数以明确接受默认颜色:
enum DefaultColorEnum {
DefaultColor
};
void CCore::Color(Color3i color) {
... //normal code
}
void CCore::Color(DefaultColorEnum) { //ignore the parameter value, the type is what matters
Color(Color3i()); //invoke the generic version with default value
}
...
Core.Color(DefaultColor);
这完全取决于你真正希望实现的目标......