Domanda

Ho codice simile al seguente:

class B
{
}

class A
{
  enum {
     EOne,
     ETwo
  } EMyEnum;

  B myB;
}

Voglio dichiarare un membro di tipo EMyEnum in classe B (che è dichiarato prima di A). È possibile? Mi rendo conto che la soluzione è quella di dichiarare di classe B secondo, ma per chiarezza io preferirei non.

È stato utile?

Soluzione

Non è possibile ... ma può essere simulato con l'abuso di successione:)

namespace detail
{
  class A_EMyEnum
  {
  public:
    enum {
       EOne,
       ETwo
    } EMyEnum;

  protected:
    A_EMyEnum() {}
    A_EMyEnum(const A_EMyEnum&) {}
    A_EMyEnum& operator=(const A_EMyEnum&) { return *this; }
    ~A_EMyEnum() {}
  }; // class A_EMyEnum
} // namespace detail

class B { // use detail::A_EMyEnum };

class A: public detail::A_EMyEnum
{

  B mB;
};

D'altra parte ... perché non è sufficiente dichiarare avanti B?

class B;

class A
{
public:
  enum EMyEnum {};

  A();
  A(const A&);
  A& operator=(const A&);
  ~A();
  void swap(A&);

private:
  B* mB;
};

class B { // use A::EMyEnum };

Certo è necessario scrivere in realtà "ha generato default" metodi di A tutto il solito, ma hey che non costa tanto!

Altri suggerimenti

L'attuale standard di C ++ non consente in avanti dichiarazioni di enums, anche se arriveranno nel prossimo standard di C ++ 0x.

qui per ulteriori informazioni.

È possibile dichiarare un parametro come modello di B. Secondo modo per risolverlo sta usando Int. - è noto che c ++ enum è int

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top