问题标签 [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++ - 读取 plist 文件时增加任何转换问题
我正在从 Visual C++ 中的 plist 文件中读取一些数据。
文件中的数据是这样的:
Caminando_001.png x y width height offsetX offsetY originalWidth originalHeight
我读到 x 键值,然后我做类似的事情
int Left = boost::any_cast(iter->second); //iter 是一对 std::string boost::any
最后一行引发了一个异常(任何错误的演员表),我不知道问题出在哪里。
c++ - 实现任何容器
我很清楚boost::any
and boost::variant
,但在这种情况下,它们不符合我的需求。
通常,为了包含一个未知类型的对象,人们会从一个公共基础派生它并通过虚拟方法访问该实例。但是,如果不可能使用一个共同的基地怎么办?
我知道在这个例子中你必须知道包含的类型,但请耐心等待。std::vector
是一个模板类,顶级类也是一个模板。据我所知,如果不修改 STL 标头,就无法为其提供非模板库。现在,假设我想创建一个单一类型的向量,但包含的类并不关心类型,但它确实需要访问一些“常用”方法,size()
例如pop_back()
。
使用boost::any
,类型已被删除,几乎不可能取消引用包含的对象。boost::variant
并且tuple
需要事先知道可以插入哪些类型,从而导致包含类本身就是一个模板。
我到目前为止是这样的:
这里客户端可以调用,create()
模板参数应该自动确定。我知道这不是一个很好的例子,但我试图对客户端隐藏模板参数。如果不这样做,some_class
还必须跟踪存储的类型。
我的方法依赖于导致性能损失的虚拟调用,尤其是当内部类有自己的虚拟方法时。
还有其他类型的容器更适合我的需要吗?
理想情况下,我想要这样的东西
在内部,它将跟踪类型并进行简单的转换,而不是依赖于虚拟方法。几乎就像auto
不同之处在于一旦声明它的类型可以改变。
编辑:
实际上,我想围绕std::basic_filebuf
. 此包装类使用或char
基于BOM 打开文件。包装器也派生自模板参数,无论客户选择什么。在内部,它将文件中的 unicode 代码点转换为客户端所需的编码。存储内部时会出现问题,因为它可以使用任何类型作为模板参数声明。我不想使用模板专业化,因为我希望客户端能够传入他们自己的实例。wchar_t
unsigned long
basic_filebuf
basic_filebuf
basic_filebuf
必须与 VS2010 兼容,它具有 C++11 的有限功能。
c++ - nullptr 作为 boost::any 地图的标志值
如果我使用 设置通用容器映射boost::any
,并使用nullptr
C++11 中的 new 作为类似于isset()
类型操作的初始化值,是否有任何潜在的陷阱?
例如:
在 C++11 之前,我将boost::any
struct 包裹在带有 a 的结构中bool isset
,但这似乎有效。有什么陷阱吗?
c++ - boost::any 是可移动的吗?
这段代码可以编译,但我认为它没有达到我的预期,即移动,不要复制,boost::any
在堆栈上创建的对象到std::vector<boost::any>
c++ - 设置/访问使用地图制作的锯齿状地图值
已经向我展示了如何std::map
使用boost::any
.
但是,我在设置这个答案中的值时遇到了麻烦。
当我使用
gcc
给出这个错误
如何访问map
创建的锯齿状多维boost::any
?(如果有更好的技术可以做到这一点,请告诉我。我只关心有效且快速编写的方法。)
多维声明
我放弃并尝试使用 json-spirit mObject
,因为所有这些似乎都已经内置了。
有趣的是,使用完全相同的符号,我得到完全相同的错误。
c++ - 实现一个对象目录:boost::any、boost::variant 还是?
我想实现一个存储不同类型对象的目录对象。需要能够按名称访问对象,获取实际的指针类型并将其序列化。我想到的对象是这样的:
“SomeType”我正在考虑使用 Boost::variant。但是似乎我需要在运行时将对象类型添加到变体列表中。即使我知道前面目录中的对象类型,它也会变成
不同的目录在哪里Typelist
是不同的。那么,拥有一个 dirs 的目录就是 Typelist 的动态联合。看起来很复杂。它很快就会达到 50 种变体类型的限制。替代方案是 Boost::Any 以简化语义。但我想迭代对象集,并对其进行处理——每个对象都是一个 boost::fusion adapt_struct——我想对每个对象的每个成员进行 fusion::for_each 并显示它们,例如。有什么替代方案或建议吗?
c++ - 为什么 boost::any 不包含字符串文字?
注释的代码行无法编译,为什么?我认为字符串文字在大多数情况下可以充当 char*,这是相关的 r-value 和 l-rvalue 吗?
错误信息:test_boost_any.cc
c++ - 如何根据 C++ 中参数的值返回不同的类型?
我想在 C++ 中用不同的参数值做一些重载。
类似于 Python 之类的动态语言:
C++ 中是否有一些 RTTI 模式可以使其工作?
Boost::any 调用函数时需要隐含定义类型:
如何在不隐含给出'int'的情况下定义结果变量?
换句话说,我想在下面制作这个语义:
c++ - Boost::any 对存储值的引用未编译
我正在尝试编写一个包含这样的参数的通用配置类(大大简化了):
问题出在add_parameter_group
函数中:
返回编译失败的消息
我不明白为什么。根据boost::any_cast
文档:
如果传递了一个指针,如果成功则返回一个类似限定的指向值内容的指针,否则返回 null。如果 T 是 ValueType,它返回一个保存值的副本,否则,如果 T 是对(可能是 const 限定的)ValueType 的引用,它返回对保存值的引用。
为什么这没有返回看起来应该的引用?