boost::可选 - 对对象使用 boost::in_place,构造器通过引用获取其他对象
boost::optional - using boost::in_place for the object which constuctor takes other object by the reference
我尝试对不可移动和不可复制的对象使用 boost::in_place,构造函数通过引用获取其他对象:
struct A
{
};
struct B
{
B(A& a): a_(a){}
B(B const &) = delete;
B(B&&) = delete;
B& operator=(B const &) = delete;
B& operator=(B&) = delete;
A& a_;
};
int main()
{
A a;
boost::optional<B> op(boost::in_place(a));
return 0;
}
代码无法编译:类型"A&"到"const A"的绑定引用会丢弃限定符
如何解决?
使用就地构造函数。
在 boost 中,这就是这个构造函数,它接受一个 in_place_init_t
变量,然后使用以下参数就地构造。
boost::optional<B> op(boost::in_place_init, a);
// Calls `B::B(A&) with `a`
或者要继续使用 in_place
,默认情况下采用常量引用,请指定它不是常量引用:
boost::optional<B> op(boost::in_place<A&>(a));
相关文章:
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 如何将来自 Boost.Python 的map_indexing_suite与自定义而不是标准对象一起使用?
- 如何复制 boost::aligned_storage 对象中的数据?
- 释放 boost::singleton_pool 中的所有对象
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 在 boost::heap::p riority_queue 中推送结构对象时出错
- 如何将任何值转换为对象并使用 boost::p roperty_tree json 添加成员
- 动态分配许多 Boost::直方图对象
- 在 boost::p ython 中的 python 对象中运行 python 代码
- 将动态分配对象传递到 boost::any 构造函数中
- 通过 Boost Python 在C++对象之间传递共享指针的隔离错误
- Boost.Python 返回引用现有 c++ 对象的 python 对象
- 使用BOOST :: PYTHON返回裸露的类对象列表,这些对象是不可复制的
- 重用 Boost 的计时器对象
- 使用boost :: python手动构建共享对象
- 如何在Boost Serialization中检索多个对象值
- Boost Intervocess:通过迭代通过从结构引用对象的映射进行迭代时
- C++Boost对象序列化-定期保存以保护数据