如何给出一个数组作为默认参数的函数吗?我试过这个:
void drawCircle(float radius, GLfloat colour[3]={2.0, 3.0, 4.0}, bool do=true) {
...
}
部分GLfloat colour[3]={2.0, 3.0, 4.0}
给我一个错误。这在C++中可能吗?
如何给出一个数组作为默认参数的函数吗?我试过这个:
void drawCircle(float radius, GLfloat colour[3]={2.0, 3.0, 4.0}, bool do=true) {
...
}
部分GLfloat colour[3]={2.0, 3.0, 4.0}
给我一个错误。这在C++中可能吗?
不能按值传递数组,所以你不能做到这一点。
所以解决办法是,重载函数为:
void drawCircle(float radius, GLfloat *colour, bool pleaseDo)
{
//...
}
void drawCircle(float radius, GLfloat *colour)
{
drawCircle(radius, colour, true);
}
void drawCircle(float radius)
{
GLfloat colour[3]={2.0, 3.0, 4.0};
drawCircle(radius, colour, true);
}
drawCircle(a,b,c); //calls first function
drawCircle(a,b); //calls second function
drawCircle(a); //calls third function
第二和第三个功能最终调用第一功能!
另请注意,do
是一个关键字,因此您不能将其用作变量名称。我用pleaseDo
代替它:D
在C++中,您不能将一个完整的内存块作为参数传递给一个函数,但您可以传递它的地址。
所以不,你不能在C++ 03中至少做到这一点。
你可以这样做:
GLfloat defaultColor[3] = {2.0, 3.0, 4.0};
void drawCircle(float radius, GLfloat colour[3]= defaultColor, bool do=true)
{
}
您可以将您的默认值定义为全局变量。然后,使用这个全局变量作为函数的默认参数。
GLfloat default_colour[3] = {2.0, 3.0, 4.0};
void drawCircle(float radius, GLfloat colour[3] = default_colour, bool doit = true)
{
}
顺便说一句,do
是一个关键字,你不能把它作为一个参数名称。
你不能完全做你想做的事,但这种解决方案适用于我的编译器:
static GLFloat DefaultColour[]={2.0,3.0,4.0}
void drawCircle(float radius, GLfloat colour[]=DefaultColour, bool do=true) {
...
}
我认为,从C++ 11的Initializer Lists功能可以在你的问题有所帮助。
void drawCircle(float radius, std::initializer_list<float> colors = {0.9f, 0.2f, 0.7f}, bool do=true)
{
if (colors.size() == 3)
{
// parse the values...
}
...
}
// and then...
drawCircle(10.0f);
不幸的是我不知道,此功能在您的编译器:(
你永远无法传递一个数组作为参数。你通过什么是指针开始。 –
这是一个重复,但它不值得downvote。+1为业障 –