C++ 如何隔离班级?

C++ 如何隔离班级?,c++,class,encapsulation,C++,Class,Encapsulation,福安 foo.cpp 如何在*.cpp文件中隐藏绝缘类栏 i、 e.我不想将类Bar{}从*.h文件导入*.cpp文件 也许有一些类的封装技术?不清楚您到底想要什么。如果您只想在特定的.cpp文件中看到Bar,这很容易: foo.h: // add include guard here. class Foo {}; foo.cpp: #include "foo.h" namespace { class Bar {}; } Foo foo; Bar bar; 请注意,这限制了所有

福安

foo.cpp

如何在*.cpp文件中隐藏绝缘类栏

i、 e.我不想将类Bar{}从*.h文件导入*.cpp文件


也许有一些类的封装技术?

不清楚您到底想要什么。如果您只想在特定的.cpp文件中看到Bar,这很容易:

foo.h:

// add include guard here.
class Foo {};
foo.cpp:

#include "foo.h"

namespace {
    class Bar {};
}

Foo foo;

Bar bar;
请注意,这限制了所有的可视性酒吧foo.cpp虽然。foo.cpp之外的任何东西都不会意识到它的存在

但是,实际上并没有一种方法可以使类仅在头文件中可见-头文件的全部要点是将其包含在一个或多个.cpp文件中,当您这样做时,它包含的任何内容都会在该.cpp文件中可见


如果你认为这是你想要的,那么你很有可能需要后退一步,告诉我们你真正想要实现的目标。也许有办法,但你尝试的方式几乎肯定是错误的。基本的划分是,标题是指通常可见的东西;任何私有的东西都会被限制在implementation.cpp文件中。

不清楚您到底想要什么。如果您只想在特定的.cpp文件中看到Bar,这很容易:

foo.h:

// add include guard here.
class Foo {};
foo.cpp:

#include "foo.h"

namespace {
    class Bar {};
}

Foo foo;

Bar bar;
请注意,这限制了所有的可视性酒吧foo.cpp虽然。foo.cpp之外的任何东西都不会意识到它的存在

但是,实际上并没有一种方法可以使类仅在头文件中可见-头文件的全部要点是将其包含在一个或多个.cpp文件中,当您这样做时,它包含的任何内容都会在该.cpp文件中可见

如果你认为这是你想要的,那么你很有可能需要后退一步,告诉我们你真正想要实现的目标。也许有办法,但你尝试的方式几乎肯定是错误的。基本的划分是,标题是指通常可见的东西;任何私有的文件都会被限制在implementation.cpp文件中。

这个怎么样

class Foo
{
private:
     struct Bar
     {

     };

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


int main()
{

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


    return 0;
}
这个怎么样

class Foo
{
private:
     struct Bar
     {

     };

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


int main()
{

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


    return 0;
}

酒吧;不可能。它是一个类模板,因此需要一个模板参数。首先,不要在标题中使用未命名的名称空间,也不要添加任何您希望只能在标题中的.cpp中访问的内容。如果它不应该从外面进入,为什么它首先会出现在头球?@David Rodríguez-dribeas,我只是好奇它是如何进入的done@Algorithm:您想知道如何在标题中提供您不希望标题用户使用的内容?简单,不去做。医生,我这样做很痛。不要这样做吧;不可能。它是一个类模板,因此需要一个模板参数。首先,不要在标题中使用未命名的名称空间,也不要添加任何您希望只能在标题中的.cpp中访问的内容。如果它不应该从外面进入,为什么它首先会出现在头球?@David Rodríguez-dribeas,我只是好奇它是如何进入的done@Algorithm:您想知道如何在标题中提供您不希望标题用户使用的内容?简单,不去做。医生,我这样做很痛。不要这样做