2014-07-10 43 views
-3

我試圖找到一些帖子或文章,但我似乎無法找到說明有關不推薦使用枚舉類型

  • 很好地解釋了什麼是棄用的枚舉類型
  • 什麼過時的手段,
  • 他們是如何申報或發現的
  • 他們應該如何處理(或不)
  • 他們可能導致什麼問題?

重定向我到一篇有用的文章也會很棒 非常感謝!

+1

可能與http://stackoverflow.com/q/5488057/1938163 –

+4

相關您能提供一些指向這些帖子的鏈接嗎?目前還不清楚你在說什麼。 – juanchopanza

+1

*棄用*是不錯的方式*不要再使用我*不破壞向後兼容性 – blgt

回答

2

什麼是不推薦使用的枚舉類型?

的術語是模糊的,但意味着某種特定枚舉類型已經被標記爲使用任何棄用:

  • 一個編譯器特有的符號,這樣就會出現警告或錯誤,如果他們」重新使用,和/或

  • 沒有任何技術執行的文檔(無論是例如大規模的企業「編碼標準」要求只使用C++ 11枚舉類,還是特定的枚舉類型的API特定註釋已棄用)

棄用的含義是什麼?

該功能可能會在系統的後期版本中刪除,通常是因爲它被認爲較差(無論是現有的替代方案,還是可維護性,性能,穩健性等)或不重要。

它們是如何聲明或發現的?

如果棄用正由編譯器執行的,那麼它將被必須包括在相同的翻譯單元作爲enum類型的:它可以是在相同的標題,或在一般的「deprecation.h 「頭,等等。這裏是爲了一個共同的編譯器的幾個例子:

  • GCC:enumX [{ ... }] __attribute__ ((deprecated));

    • 爲單獨列舉:enumX{E1__attribute__((deprecated)) [=] [, ...] };

又該如何處理,(或沒有)

如果可以的話,你應該調查爲什麼他們被棄用和替代品是什麼,並使用它們來改變代碼以避免它們。

他們可能導致什麼問題?

他們造成的直接問題是您的編譯器可能會產生警告或錯誤。

他們很可能是反對,因爲它不是最好的主意,用他們甚至與當前軟件 - 相關的功能可能是低效的,越野車等。例如,給定enum Image_Format { GIF, PNG, JPEG, SVG };GIF可以在系統中推薦使用,因爲PNG已被證明對系統的用戶更好 - 例如也許是因爲它支持更好的顏色深度,更準確地保留顏色,或者SVG可能會被棄用,因爲有些客戶端被發現使用的Web瀏覽器不會顯示它們,JPEG可能會被棄用,因爲已知系統中的圖像aren自然攝影圖像和格式會導致視覺效果較差的結果,儘管壓縮文件較大,處理速度較慢並且內存使用率較高 - 可能導致不推薦使用的許多動機。

一個更大但並非直接的問題是,它們可能隨着軟件「子系統」提供它們的下一個版本而消失,所以如果你不移植舊代碼並避免使用它們創建新代碼,那麼你的軟件將會必須先解決,然後才能使用該子系統的更新。

+0

謝謝你的答案,這個術語是不明確的,因爲我對這個主題知之甚少 – thahgr

+1

@thahgr:當然......沒有任何傷害......我希望你現在有足夠的洞察力,讓人們明確地認識到下次你的意思聽到它,並按照他們的回答....乾杯。 –

-1

過時的手段 -

  1. 您可以使用此功能在目前最新的穩定版本,但該功能將在未來的版本中刪除,但沒有提及。

  2. 它們由創建它們的庫或SDK標記。有些語言使用attirubutes來標記棄用。像C#使用 - [Obsolete]屬性,我不確定C++,不知道它們用於標記已棄用的內容。

  3. 它們可以在將來的任何版本中刪除。因此,如果您使用它們,您的代碼或程序可能無法在將來的更新中使用,因爲該功能可能在未來的更新中被刪除。

+0

這將展現不贊成的含義,但與實際問題無關。 – pmr

+1

你真的確定他只問過Enum Deprecation嗎?..再次閱讀問題。棄用是一個全球概念。它不支持任何類型,比如'enum'或'class'。這不是像納稅折舊與正常折舊不同。 –

+0

你假設你知道OP在問什麼。你沒有。他可能會用「不推薦的枚舉類型」來表示多種事情,他的3個要點依賴於它。你回答了顯而易見的要點。 – pmr

3

什麼是廢棄的枚舉類型?

我從來沒有聽說過確切的措辭,但實際上這是一個enum(類型)標記爲已棄用。

棄用的含義是什麼?

不贊成意味着某些價值,功能甚至模塊被標記爲現在已過時或被替換。它仍然存在與舊代碼的兼容性,但除非真的必須,否則不應該在新代碼中使用它。請記住它可能會在未來的版本中刪除。

他們是如何申報或發現的?

不幸的是,我不知道有任何真正的標準/跨平臺方式來做到這一點。 The question linked in the comments有一些關於這方面的例子。如果您的編譯器支持某些特殊標記(#pragma指令或某種屬性),如果標記正確,它應該發出警告或類似的警告。

他們應該如何處理(或不)?

如上所述,儘量避免標記爲棄用的東西。通常會有一些替代品或至少提示未來要做什麼/如何做。例如,如果您試圖在MSVC中使用某些標記爲已棄用的標準庫函數,則編譯器通常會告訴您要使用哪個函數。

他們可能導致什麼問題?

現在,它們很可能不會導致任何問題,但是您可能無法利用某些庫提供的所有功能。例如,MSVC中的經典sprintf()從未檢查寫入的緩衝區長度。如果你嘗試使用它,你會得到一個警告,要求你改用sprintf_s(),這樣做會進行安全檢查。你不必這樣做(它被標記爲已棄用但未被刪除),但你基本上錯過了。不要忘記,如果廢棄的東西最終被刪除,您的代碼可能會中斷(並且稍後需要重寫)。

+0

鏈接的問題是關於枚舉數(枚舉值)。要拋棄枚舉類型,您可以使用C++ 14標準的[[deprecated]]屬性定義它:'enum class [[deprecated]] colors {red,green,blue};'。 – Potatoswatter

+0

噢,不錯,另一種添加關鍵字的方法?爲什麼它不能被「棄用」? :(@Potatoswatter所以這可用於所有自定義類型,但不是(枚舉)元素? – Mario

+0

是的,屬性遍佈語法,但統計員沒有[[]]得到任何的愛 – Potatoswatter