簡體   English   中英

訪問C ++枚舉器的哪種方式更好?

[英]Which way of accessing C++ enumerators is better?

我正在尋找一些最佳實踐建議。 如果你有一個用C ++聲明的類,如下所示:

class Foo {
public:
    enum { A, B, MAX};
};

是否應該訪問枚舉,如:

Foo::A

要么

Foo *var; 
var->A;

直到今天,我總是訪問像Foo::A這樣的常量值,而不是通過類類型的ptr。 事實上,我甚至不相信這是可能的。 有沒有人遇到過何時以及是否應該使用每個表格,還是應該堅持使用經過試驗和測試的Foo::A方法?

編輯:讓Foo變成Foo * var這是一個錯字,因為大多數人都發現了感謝。

枚舉與類相關聯,而不是與實例相關聯。 所以Foo::A更好。

據推測,您的示例應該聲明指針Foo * var或者將枚舉數作為var.A訪問。

如果你沒有可用的對象或指針,那么顯然“類”形式Foo::A是唯一明智的選擇。

如果你這樣做,那么兩種形式都是等價的。 在我看來,“類”形式更具表現力,因為它匹配與類的關聯而不是對象。 它也可能與那些不相信它有效的人保存爭論。

在某些情況下(例如在模板中,或者使用auto類型聲明的對象),類名可能很復雜甚至是未知的,在這種情況下,“對象”形式會更好:

template <typename T>
void f()
{
    typename some::complicated::type::depending_on<T>::type var;
    var.thing = var.A;            // OK
    var.thing = decltype(var)::A; // Ugly, requires C++11
    var.thing = some::complicated::type::depending_on<T>::type::A; // Yuck!
}

第一個版本更好,就像@ KevinA.Naude所說。 如果您正在尋找一種方法來為enum提供范圍,您可能需要查看C ++ 11 enum class ,它允許您使用enum class X {A, B, MAX};等構造enum class X {A, B, MAX}; 強制執行范圍 - 您將需要X::A來引用它的內部。

暫無
暫無

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

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