簡體   English   中英

如何以簡潔的方式將初始設置值傳遞給模板化的 class?

[英]How do i pass initial setup values to a templated class in a succinct way?

這是一個非常簡化的問題版本,可以清楚地說明我在問什么。 我似乎無法在 Stack Overflow 上找到它,但我可能正在使用錯誤的詞進行搜索!

這是一個模板 Class,刪除了明顯的部分。

template <class T, bool clip = true>
class BOUNDED_VAL { 
    public:     
        BOUNDED_VAL(T initialMin, T intialMax) :locked(false) {     
            assert_or_throw(intialMax >= initialMin, HD_ERR_MINMAX_REVERSED);
            min = initialMin;
            max = intialMax;
            value = initialMin;
        };etc.

// assert_or_throw is a typedef which asserts during debug builds to prevent programmer mistakes (especially my own) or throws a rich catachable runtime error for user input just in case something gets around user input limit checking during release builds (A hard wall). Belt and braces approach...

現在我知道我可以將其設置為初始化私有 class 成員變量,如下所示:

private:
    BOUNDED_VAL<int> testBoundInt = BOUNDED_VAL<int>(0, 10);

  1. 這是否會創建一個新的 BOUNDED_VAL 然后將其復制到成員變量上(或者編譯器在優化期間將其刪除)?

  2. 有沒有更簡潔的方法我只是找不到? 我知道以下內容不起作用,但例如:

private:
    BOUNDED_VAL<int> testBoundInt(0,10);

或者

private:
    BOUNDED_VAL<int>(0,10) testBoundInt;

我是在 C++ 自學的,所以這可能是一個顯而易見的問題……但你永遠不知道……

非常感謝

我知道以下內容不起作用,但例如:

 private: BOUNDED_VAL<int> testBoundInt(0,10);

但這會起作用,前提是您的編譯器是在過去十年內編寫的:

BOUNDED_VAL<int> testBoundInt{0,10};

看起來您可能正在使用過時的教科書來學習 C++,該教科書未涵蓋當前版本 C++ 的統一初始化語法。強烈建議您獲取更新的學習材料。

這個 [copy initialization] 是否創建一個新的 BOUNDED_VAL 然后將其復制到成員變量上(或者編譯器在優化期間將其消除)?

這實際上取決於您的編譯器支持和配置使用的 C++ 版本。 根據幾個因素,它會被“清除”掉,或者我們到鄉間去一次風景優美的旅行,在那里構建一個 object,然后復制構建第二個 object,然后刪除第一個 object。

但現在這是一個次要話題,因為統一的初始化語法解決了原來的問題。

暫無
暫無

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

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