在接受私有类型参数的公共类上声明一个私有方法

Declare a private method on a public class which takes arguments of private type

本文关键字:声明 有方法 一个 类型参数      更新时间:2024-04-27

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

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

如果我试图只在.cpp文件中声明helper方法,编译器会抱怨不存在这样的成员。如果我试图在.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
}

我应该如何在不公开库内部的情况下声明这样的函数呢。

您可以使Packet成为Socket的嵌套私有类,这意味着它不会暴露给库的用户。

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