c++ - 通过引用接收的习语和私有构造函数不兼容?
问题描述
我有Some
课和Factory
这个课。
Factory
是 的朋友Some
, 的构造函数Some
是私有的。Some
我这样做是因为我希望每个人都可以创建仅 via的新实例Factory
。
像这样的东西:
class Some {
friend class Factory;
Some(..) {}
public:
Some& operator=(const Some& s) {...}
};
class Factory {
public:
Some makeSome(...) {
...
return Some(...);
};
};
好的,这行得通。另一方面,我有一些队列包装器(出于同步原因包装)。它用成语写道“每个方法都必须返回错误代码。结果仅通过参数引用传递”
就像是:
template <class T>
class SyncQueue {
queue<t> m_q;
mutex m_m;
public:
....
int Pop(T &t) {
lock_guard<mutex> lock(m_m);
if (m_q.empty())
return 1;
t = m_q.fromt();
m_q.pop();
return 0;
}
};
据我了解,我不能用它SyncQueue
来拉Some
,对吗?
因为这样的代码:
Some s;
if (queue(s)) {
...
}
必需的空构造函数Some
。我有下一个选择:
public
为_Some
- 制作
private
空的构造函数并添加新friend
的Some
- 使用指针
Some
有一些在构造过程中必须初始化的 const 成员(并且只Factory
知道这个值)。施工也是Some
繁重的作业;
所以这三个选项都很糟糕:
- 公共构造函数破坏了关于工厂的想法。
- 很多朋友都不是个好主意。
- 指针需要重写很多代码。使用它也是一个很大的痛苦。
我错过了什么,或者没有办法按照我的意愿工作?
解决方案
推荐阅读
- firebase - 如何以 Firebase 作为后端部署 expo react 本机应用程序?
- python - 向 docker 容器中的站点发送 HTTP 请求
- java - 使用多线程卖票但为什么没有错误
- mongodb - 如何连接 zend - laminas 和 MongoDB
- python - 如何在 django 中多次注释相同的值?
- random - 显示“列表项(随机)”的橙色块在哪里?我搞不清楚了
- c# - 将单个xml节点作为数组转换为json
- java - 模式匹配特定目录中可能嵌套在该目录中的文件
- amazon-web-services - 使用 Elasticsearch Service 对 AWS 上的搜索应用程序使用 Lambda 和“禁止”API 响应进行故障排除“错误处理程序”错误
- html - 需要在渲染后修改动态内容而不破坏绑定