stdany相关内容

C++ std::map 持有任何类型的值

基本上我想要 MyClass 持有一个 Hashmap 将字段名称(字符串)映射到任何类型的值.. 为此,我编写了一个单独的 MyField 类来保存类型 &价值信息.. 这是我目前所拥有的: template 类 MyField {T m_Value;int m_Size;}结构我的类{std::map领域;//错误!!!} 但是正如您所看到的,地图声明失败了,因为我没有为 MyFie ..
发布时间:2021-12-13 18:44:25 C/C++开发

C ++ std :: map保存任何类型的值

基本上,我希望MyClass拥有一个Hashmap,该哈希表将字段名称(字符串)映射到 Value的任何类型。为此,我编写了一个单独的MyField类,其中包含&值信息。. 这是我到目前为止的内容: 模板 class MyField { T m_Value; int m_Size; } struct MyClass { std :: ..
发布时间:2020-09-26 22:49:43 C/C++开发

为什么在dlopen函数中传递的std :: any的std :: any_cast会引发错误

我正在玩c ++ 17和插件,但遇到了我无法解决的错误.在下面的MWE中,我可以调用采用std::any的局部函数,并且当我尝试读取内容时,一切都会按预期工作.当我通过插件(dlopen)加载此完全相同的函数时,它可以正确地看到any上的类型,但不能std::any_cast内容. 找出造成此错误的原因,将不胜感激. 这是我的环境,MWE和所导致的错误. >> g++ --ver ..
发布时间:2020-07-31 06:31:03 C/C++开发

获取std :: any的大小

是否有任何方法可以获取std::any存储的数据大小(以字节为单位)?我想出的唯一解决方法是通过std::any::type查询其值的类型,然后将结果与已知类型的列表(例如my_any.type() == typeid(T))进行比较,然后将大小设置为sizeof(T).不幸的是,这种解决方案仅在事先知道类型的情况下才有效. 你知道什么解决办法吗? 解决方案 您无法获取std::an ..
发布时间:2020-07-31 06:30:59 C/C++开发

如何设计符合std :: any标准实现的存储?

标准工作草案(n4582,20.6.3,p.552)对std::any的实现提出以下建议: 实现应避免为包含的小对象使用动态分配的内存. [示例:构造的对象仅包含一个int. [-结束示例]这种小对象优化只能应用于is_nothrow_move_constructible_v为true的类型T. 据我所知,std::any可以通过类型擦除/虚拟函数和动态分配的内存轻松实现. 如果 ..
发布时间:2020-07-31 06:30:56 C/C++开发

C ++ 11标准是否提供boost :: any之类的东西?

例如boost::function几乎完全移到了std::function,与boost::shared_ptr一样. 但是我找不到std::any吗? 是重命名还是以任何理由将其放置在新标准中? 解决方案 并不是boost中的每个库都使其成为标准库(甚至包括那些已删除组件的库).通常,在添加到标准库中时,提交人相当保守(因为如果包含错误(例如,因为有更好的选择),在以后无法删除某些 ..
发布时间:2020-07-31 06:30:50 C/C++开发

`std :: any_cast`返回一个副本

我正在阅读的文档,我发现奇怪的是,API强制转换将值返回到保留的对象或指向该对象的指针.为什么不返回参考?每次使用非指针类型参数调用函数时,都需要复制一个副本. 我可以看到,强制类型转换的指针版本可能会更多地表明意图,并且可能更加清晰,但是为什么不将返回的值作为这样的引用呢? template ValueType& any_cast(any* o ..
发布时间:2020-07-31 06:30:48 C/C++开发

无法移动std :: any

以下代码 using vptr = std::vector>; auto m = std::unordered_map{}; m.try_emplace(0, move(vptr{})); 无法编译,抱怨使用了已删除的unique_ptr复制构造函数.在模板参数中将std::any替换为vptr后,此代码将编译,因此 ..
发布时间:2020-05-12 19:28:06 C/C++开发