1

foo.h

class Foo {};

namespace {
    class Bar {};
   //...
}

foo.cpp

Foo foo; // Ok

Bar bar; // Ok, but I want Error!

* .cppファイルでクラス Barを非表示 (絶縁) する方法は?

class Bar {}つまり、 from * .hファイルを *にインポートしたくありません。cppファイル

おそらく、クラスのカプセル化技術のようなものがありますか?

4

2 に答える 2

4

あなたが何を求めているのか正確には明らかではありません。Bar特定のファイル内のみを表示したい場合は.cpp、非常に簡単です。

foo.h:

// add include guard here.
class Foo {};

foo.cpp:

#include "foo.h"

namespace {
    class Bar {};
}

Foo foo;

Bar bar;

これにより、 toのすべての可視性が制限されることに注意してください。それが存在することさえ、外部の何も認識しません。Barfoo.cppfoo.cpp

ただし、クラスをヘッダー内でのみ表示する方法は実際にはありません。ヘッダーの要点は、ヘッダーを 1 つまたは複数の.cppファイルに含めることです。これを行うと、含まれているものはすべてその.cppファイル内で表示されます。

それがあなたの望みだと思うなら、一歩下がって、あなたが本当に達成しようとしていることを私たちに教えてください. おそらく方法はありますが、あなたが行こうとしている方法はほぼ間違いなく間違っています。基本的な区分は、ヘッダーは一般的に表示されるもの用です。プライベートなものはすべて、実装 ( .cpp) ファイルに制限されます。

于 2012-07-20T18:14:16.243 に答える
0

これはどう

class Foo
{
private:
     struct Bar
     {

     };

     void func()
     {
         Bar b; //ok
     }
};


int main()
{

    Foo f; //ok
    Foo::Bar b; //error


    return 0;
}
于 2012-07-20T18:19:56.600 に答える