-1

関数内でクラスを定義して、お互いを「認識」するにはどうすればよいですか? これは、私が理解しようとしているものの大幅に縮小されたバージョンです。私は次のようなことをしたいと思います:

void foo () {

    struct A {
        static void bar () {
            B::hmm();
        }
    };

    struct B {
        static void hmm () {
            A::bar();
        }
    }
}

A::bar() はまだ B について何も知らないため、これは機能しません。関数の外では、B が宣言されるまで A::bar() の定義を延期できます。何かのようなもの:

void foo () {

    struct A {
        static void bar ();
    };

    struct B {
        static void hmm () {
            A::bar();
        }
    }

    void A::bar () {
        B::hmm();
    }
}

しかし、それは関数内では機能しないようです。

これをすべて機能させる巧妙なスコープ宣言の代わりに、これは C++ では不可能であるという明確な回答も歓迎します (参照してください)。

これを回避する他の方法があることは知っています (たとえば、foo の外でクラスを宣言する) ので、同様のことを行う方法についての回答は探していません...

4

1 に答える 1

3

あなたはそうしない。

ローカルクラスのメンバー関数は、クラス定義内で定義する必要があります。

A::bar()との定義B::hmm()は相互に依存しており、メンバー関数はクラス定義の外部で前方宣言できないため、これが機能するように定義を順序付ける方法はありません。

(回避策を探していないとおっしゃいましたが、とにかく、関数定義内でリモートで複雑なクラス、多かれ少なかれ複数のクラスを定義すると、コードの可読性が妨げられ、悪い考えです。)

于 2010-12-16T05:55:27.153 に答える