簡體   English   中英

C ++專門針對相同類型的類行為

[英]c++ Specializing class behavior for same types

我必須編寫一個作用於可以采用兩個值的數據的類。 但是,此數據可能有兩種可能,可以是0/1值(即布爾值),也可以是-1 / + 1值(即尖刺值)。

根據方程是布爾輸入還是棘手輸入,類的行為將明顯不同(即僅使用y = 1-2x進行轉換是不夠的),因為等式具有不同的形式。

我想知道實現這一目標的最少冗余和最靈活的方法是什么。

我是不是該

  1. 只需將兩種情況都放在每種方法中,然后使用標志成員變量來選擇正確的情況
  2. 為每種情況編寫兩個完全獨立的類
  3. 使用模板專業化或以某種方式重載

    我希望這樣做,但我不知道它如何工作。 例如,如果我要處理'int'情況和'float'情況,那很好,但是-1 / + 1和0/1都只是int,所以我不能按類型區分它們。 ..除非我可以定義某種基本的“ spinny”類型,該類型只能采用值-1 / + 1,但我也不知道該怎么做。

  4. 還有其他事嗎

您可能應該定義一個棘手的類型(並為另一個使用bool )。 最簡單的方法是使用強類型的枚舉:

enum class Spin : int {
    UP = +1,
    DOWN = -1,
};

這樣可以確保您不會將布爾值誤認為是多變的值, 反之亦然。 另外,它還可以解決您的問題(使用重載或模板專門化)。

請注意,仍然可以通過從+1或-1以外的int顯式static_cast獲得“無效”旋轉值。 只是不要這樣做,您會變得很黃金。

暫無
暫無

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

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