问题标签 [boost-any]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 提升图书馆和持有价值
我已经使用boost
了一段时间,但仍然是新手。我想我爱上了,boost::any
因为我不再需要使用模板来处理使用或返回的类型化对象。然而,我觉得对我来说仍然不方便的一件事是更平滑的功能或方法,如果有的话,可以held
简洁地来回传输其数据,并且以后肯定不会使用cast_any
.
习俗
自定义 boost_any:
我喜欢这个功能,因为在调试我的程序期间,我发现这held="123456"
两种情况下的对象完全相同。我think
lib 的内部实现可能已经做到了(将它保存的内容转换为string
)。此示例仅显示 POD 类型,我想知道是否有人对此自定义进行了任何操作或为我消除cast_any
.
c++ - 如何获取对 boost::any 持有的数据的 const 引用?
在尝试通过引用强制转换检索boost::any
实例后,我无法维护 const 的正确性。boost::any_cast
我的代码:
对于为什么只有最后一个版本会产生错误,我也有点困惑。我收到的错误消息是这样的:
C:...\boost_1_58_0\boost\any.hpp:284: error: C2440: 'return' : cannot convert from 'const nonref' to 'A &' 转换丢失限定符
第 284 行如下所示:
它是从下面的一行调用的:
实施:
您可能会认为 MyMap 提供了开箱即用的无用包装功能,但真正的实现具有 get/set 方法,可在内部 std::map 内自动创建嵌套映射,提供酷炫灵活的 DOM 类数据结构。
c++ - boost::any 中的模板复制构造函数
boost::any 中的模板复制构造函数
我对 boost 的 any.hpp 中的这些代码感到困惑。
很明显,当我需要来自另一个对象的新对象时,对于 sencod 复制构造函数很有用。但是什么时候会执行第一个复制构造的呢?
c++ - 从 boost::program_options 值中键入 un-erasure
我正在尝试使用boost::program_options
. 除其他外,我编写了一个无法编译的函数。这是一个编译失败的最小 .cpp 文件:
使用四个选项中的任何一个,我都会得到不同的编译器错误:
使用选项 1:
/li>使用选项 2:
/li>使用选项 3:
/li>使用选项 4:
/li>
我究竟做错了什么?
c++ - 当我将元素类型存储在另一个字符串向量中时,如何打印 boost::any 的向量?
- 我使用 boost::any 的向量来存储不同的数据类型,从给定的程序文件构造符号表。
- 我还将它们的数据类型作为字符串存储在单独的向量中。
- 在尝试使用 boost::any_cast<>() 打印 boost::any 时,如果我将存储为字符串的数据类型作为强制转换类型传递,则会收到 bad_any_cast 错误。
如何克服这个障碍并使用我作为字符串的类型信息打印向量。
/li>
c++ - 将 boost::any 转换为 boost::variant 的通用函数
假设你有一个boost::any
对象和一个boost::variant
对象。
我正在寻找一个通用函数convert
,它接受一个模板参数 T 是一个专门的boost::variant
egboost::variant<int, std::string>
并神奇地将其转换为boost::any
给定的可用类型之一boost::variant
。
我想知道是否可以编写这样的函数,或者由于某种原因它可能是不可能的?
c++ - boost::any 构造函数 - const 类型重载决议
boost::any 有一个完美的前向构造函数,声明为:
is_const<> SFINAE 排除将 const 类型强制为常规复制构造函数:
如果删除了 is_const<> 排除项,常规复制构造函数处理 const 值的方式与完美前向构造函数的处理方式有何不同?
c++ - 尝试使用 Boost::any 的 boost::serialization
我正在尝试使用 boost::serialisation 来保存和加载一些对象。到目前为止,从 boost::tutorial 开始,我已经设法为所有不同的 stl 东西(向量、对、列表等)、派生类、boost 多数组和其他东西工作,但我一直在努力工作围绕如何序列化 boost::any 向量。让我提前说一下,我在论坛中找到并检查了一些关于 boost::varian 序列化的帖子,甚至还有一个关于 boost::any 的帖子(甚至有一个几乎相同的标题),但我还是没能解决我的问题. 所以让我举一个小例子:
说我有这门课:
更准确地说,我们期望这个小示例存在于 boost::any 向量中的 class_1 是以下类:
因此,当我使用 main 函数编译上述代码时,我在其中保存并加载了一个包含 boost::any 向量的 class_2 对象,一个 class_1 的对象,一切都会编译甚至运行:
再次加载的 newclass 对象有一个空的 boost::any 向量,其中没有保存任何内容。所以我的问题是我在上面的代码中做错了什么,我应该改变什么才能正确序列化 boost::any 向量..?任何帮助/建议将不胜感激。
c++ - boost::指针与值的任何混淆
我花了一段时间才弄清楚这一点,但语义boost::any
令人困惑。
对于值类型,您可以像这样使用它:
此代码清晰且有意义,但在value
内部存储为副本。这意味着对于我放置在其中的较大对象boost::any
,它们将被复制。此外,我用它替换的任何函数void*
都期望在我修改对象中包含的值时修改函数外部的值boost::any
(这不会发生,因为它复制了它)。
因此,如果我将指针放入其中,事情就会变得很奇怪:
在这种情况下,我必须取消引用返回值,因为boost::any_cast
返回int**
!我也没有检查过,但我认为如果something.empty() == true
. 这根本不简单。
我不想在我boost::any
的void*
. 指针,指针,混合了一些类型安全。基本上我想要的是boost::any_pointer
,或类似的东西。有没有办法禁止boost::any
接受除指针以外的任何东西?如果没有,是否有替代方案boost::any
可以为我提供我正在寻找的语义?