No C ++, como posso evitar # incluir um arquivo de cabeçalho quando preciso usar uma enumeraçã

Nos meus arquivos de cabeçalho C ++, tento usar declarações de encaminhamento (classe MyClass;) em vez de # incluir o cabeçalho da classe, conforme recomendado em muitos padrões de codificação C ++ (o Guia de Estilo do Google C ++ é um

Infelizmente, quando apresento enumerações, não posso mais fazer a declaração de encaminhamento. Como isso

//// myclass1.hpp ////

class MyClass1
{
    enum MyEnum1
    {
        Enum_A, Enum_B, Enum_C
    };
};

//// myclass2.hpp ////

// I want to avoid this
#include "myclass1.hpp"

// I'd prefer to do this (forward declaration)
class MyClass1;

class MyClass2
{
    // This is o.k.: I only need to forward declare MyClass1
    MyClass1* ptr;

    // This forces me to #include, but I don't want to!
    void func( MyClass1::MyEnum1 e );
};

A melhor solução que posso pensar até agora é substituir enums por constantes de membros:

//// myclass1.hpp  ////

MyClass1
{
    static const int Enum_A;
    static const int Enum_B;
    static const int Enum_C;
};

//// myclass1.cpp ////

const int Enum_A = 1;
const int Enum_B = 2;
const int Enum_C = 3;

Neste caso, porém, a solução parece pior que o problem

Atualmente, estou olhandoesign de software C ++ em grande escala (Lakos) erabalhando efetivamente com o código legado (Penas) para técnicas de quebra de dependência, mas ainda não encontrei uma boa soluçã

questionAnswers(8)

yourAnswerToTheQuestion