首页 > 解决方案 > 在接受私有类型参数的公共类上声明私有方法

问题描述

我正在用 C++-17 编写一个套接字库,它有一个公共类Socket(即我在.hpp文件中声明它)。这个类应该是用户和库之间的接口。

我有一个私有类型(在.cpp文件中声明)Packet,用于表示内存中的数据包。该类型Socket有一些Packet作为参数的私有辅助方法。

如果我尝试只在.cpp文件中声明辅助方法,编译器会抱怨不存在这样的成员。如果我尝试在 中声明该方法,.hpp那么我无法命名参数类型,因为它应该是私有的。

这是公共类声明(在 中.hpp):

class Socket {
 private:
  // ...private attributes
  // void serialize(Packet p, uint8_t buffer[64]); // This is the helper function. `Packet` is private type
 public:
  // ...constructors and stuff
}

这就是我尝试在实现文件中定义函数的方式:

void Socket::serialize(Packet p, uint8_t buffer[64]) {
 // ...a lot of things
}

我应该如何在不公开图书馆内部结构的情况下声明这些功能。

标签: c++class

解决方案


您可以创建Packet一个嵌套的私有 Socket 类,这意味着它不会暴露给您的库的用户。

class Socket {
    private:
        class Packet {
            ...
        };
    public:
        ...
};

推荐阅读