允许C++类访问其他类的某个"内部"成员,但不是私有的?

Max*_*Max 3 c++ access-control

当编码在功能上紧密耦合的类,但是你想要一个简单的接口到世界其他地方时,如果我可以做这样的事情,那将是很好的:

class log
{
private:
  log_context& cont;
public:
  create_log_section(std::string name)
  {
    cont.create_log_section(name);// this is fine! It's "internal"
    cont.this_is_private();       // doesn't compile. Don't want anyone touching my privates!
  }
};

class log_context
{
internal:
  void create_log_section(std::string name);
private:
  void this_is_private();
internal friend log;             // Wow, possible?
}
Run Code Online (Sandbox Code Playgroud)

现在,这将允许日志访问上下文的相关部分,而不是私有部分.程序的其余部分应使用日志添加任何上下文.它也可以log_contexts在日志之间传递强类型而不需要任何额外的功率.我意识到这个特殊的解决方案是不可能的,但是有什么常见的解决方案呢?

cra*_*jul 7

您可以使用内部类来执行此操作

class log_context
{
    class internal
    {
        friend log;

        static void create_log_section( log_context & context, std::string name)
        {
            context.create_log_section( name );
        } 
    }

    private:
        void create_log_section(std::string name);
        void this_is_private();
}

class log
{
    private:

    log_context& cont;

    public:

    void create_log_section(std::string name)
    {
        log_context::internal::create_log_section( cont, name );// this is fine! It's "internal"
    }
};
Run Code Online (Sandbox Code Playgroud)

作为内部仅作为私有静态函数,只有其朋友可以访问它