簡體   English   中英

C ++將“默認”結構傳遞給函數

[英]C++ passing “default” struct to function

我試圖弄清楚如何在不初始化結構的情況下將“默認結構值”傳遞給函數,這就是我現在所擁有的:

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初始化它; 這可能嗎?

抱歉,以前是否有人問過這個問題,但是我嘗試搜索網絡,但找不到任何內容(也許我使用了錯誤的關鍵字進行搜索)

您應該能夠執行以下操作:

Core.Color(Color3i());

也就是說,調用默認的構造函數來初始化一個新實例並傳遞它。

有幾種方法可以傳遞您希望顏色為默認值的信息。 最簡單的一個已經在注釋中給出:

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);

這完全取決於您實際想要實現的目標...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM