c++ - 在接受私有类型参数的公共类上声明私有方法
问题描述
我正在用 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
}
我应该如何在不公开图书馆内部结构的情况下声明这些功能。
解决方案
您可以创建Packet
一个嵌套的私有 Socket 类,这意味着它不会暴露给您的库的用户。
class Socket {
private:
class Packet {
...
};
public:
...
};
推荐阅读
- react-native - mobx 在对象深处丢失属性
- jquery - 无法将 JQuery 导入 TypeScript 文件
- ios - 请求权限时设置标题?
- php - 编辑后关于 magento 的关于我们的页面没有改变
- angular - 在 Angular 项目中导入库时出现“找不到模块指纹 js2”错误
- node.js - 如何集成两个不同的服务器,如 Angular 和 NodeJs?
- ibm-connections - Connections 6 搜索边栏可以集成到第三方应用程序中吗?
- arrays - 将 CENTER 数组的 CENTER const 更改为循环/迭代?
- maya - 在选定的多个对象上重复当前的多边形减少功能?
- javascript - Next.js 加载