如何給出一個數組作爲默認參數的函數嗎?我試過這個:
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爲業障 –