问题标签 [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::any 内容
我正在使用一个容器来保存指向任何东西的指针列表:
为了在这个容器中插入元素,我编写了几个辅助函数(的成员struct Example
):
现在,我只想在元素不存在于此容器中时插入元素。为此,我认为我只需要使用适当的比较器函数search
进行调用。elements
但是,我不知道如何比较boost::any
实例。
我的问题:
知道我的boost::any
实例总是包含指向某物的指针;是否可以比较两个boost::any
值?
更新
我感谢你的回答。我还设法以一种可能不安全的方式做到了这一点:使用boost::unsafe_any_cast
来获取 avoid**
并比较底层指针。
目前,这工作正常。但是,我会感谢您的评论:也许这是一个大错误!
c++ - 从字符串/boost::any 映射构建 boost::options
我有一张代表配置的地图。这是一张std::string
和的地图boost::any
。
该地图在开始时被初始化,我希望用户能够在命令行上覆盖这些选项。
我想做的是使用该options_description::add_option()
方法从该地图构建程序选项。但是,它需要一个模板参数po::value<>
,而我所拥有的只是boost::any
.
到目前为止,我只有代码的外壳。 m_Config
代表我的配置类,并getTuples()
返回一个std::map<std::string, Tuple>
. TuplePair
是一个 typedefstd::pair<std::string, Tuple>
并且元组包含boost::any
我感兴趣的。
有没有办法以这种方式构建它,还是我需要自己动手做?
提前致谢!
c++ - 如果您不知道原始类型是有符号还是无符号,有没有办法从 boost::any 中获取一个整数
我正在boost::any
结合使用boost::any_cast<>
来编写一些框架代码,这些代码应该接受一组参数,几乎就像一个函数调用,并将它们转换为一个boost::any
类型数组。
到目前为止,一切都很好,除了在很难预测来电者给我的号码是签名还是未签名的地方。我们现有产品(基于 Windows)中的许多代码使用局部变量DWORD
和BYTE
数据类型,因此如果使用其中一个变量,我会得到无符号类型。但是,如果一个常量是硬编码的,那么它很可能是一个简单的数字,在这种情况下它将被签名。
由于我无法预测是否应该执行any_cast<int>
or any_cast<unsigned int>
,因此读取boost::any
数组的代码有 50% 的时间会失败。
有谁知道boost::any
无论原始类型是签名还是未签名,是否有办法只计算一个数字?
c++ - 从 boost::any 中恢复函数指针
我想使用 boost::any 来存储异构函数指针。当我尝试使用 boost::any_cast 重新转换为函数指针时出现异常。
我想做的事甚至被允许吗?
。H:
.cpp
- - 编辑 - -
好吧,你是对的,它之所以这样,是因为 foo 是一个类成员函数。
意义:
所以我需要typedef:
c++ - 任何/变体的 C++ 容器,每个元素具有不变的类型
我std::map<const char*, boost::any>
用来存储我的图书馆的设置。每个设置只使用一个基础值类型,我想在配置调用set()
或类似的过程中强制执行这一点。使用正确类型的默认值初始化设置。
这是一些伪代码,希望能显示我想要实现的目标:
是否可以在运行时捕获这样的类型错误?如果可能的话,我不希望在我的 API 中有模板函数。
我已经使用过,但如果这是唯一可行的解决方案,我boost::any
可能会考虑 boost::variant 。which()
c++ - 如何使用对对象的引用来初始化 boost::any?
我想在对象中存储对对象的引用boost::any
。如何初始化 boost::any 对象?我试过了std::ref()
,但boost::any
被初始化为std::reference_wrapper<>
. 例如,以下
印刷
我希望boost::any
改为包含int&
。
c++ - boost::any 析构函数崩溃
主 exe 加载 dll。从返回简单 boost::any 的 dll 调用函数。如果在 FreeLibrary 应用程序在析构函数处崩溃后删除了 boost::any。没关系。但我不明白为什么这段代码也会在 r2 析构函数中崩溃,在 main 和 delete 中创建的 r2 不需要 dll 代码。如何在 FreeLibrary 之后保存 boost::any。尝试不使用 extern "C" - 效果相同。
控制台代码:
DLL代码:
编译器 Visual Studio 2005
c++ - C++11 标准是否提供类似 boost::any 的东西?
例如boost::function
几乎完全移至std::function
,与boost::shared_ptr
但是我找不到std::any
?它是重新命名还是根本没有以任何理由置于新标准中?
boost - 如何从包含 boost::shared_ptr 的 std::list 中检索数据
我需要帮助尝试检索保存在std::list<boost::shared_ptr<boost::any>>
我正在使用私有的单例控制器类std::list
。客户端类将能够通过这个控制器类添加/删除/编辑程序使用的具体类对象。
使用的原因boost::shared_ptr
是因为我为每个创建的具体类分配了一个唯一的 objID。将实例 obj 添加到控制器后,用户将能够稍后搜索和删除 obj。每个具体类的Add(....)
和Remove(...)
重载方法都可以正常工作。
我现在正在尝试创建getObject(int index)
&setObject(int index)
方法,但似乎无法弄清楚如何将返回的指针转换为具体类。
请指教。
我当前的代码:
c# - C# - 任何类似于 boost::any 的东西?
我有一个要求: 1. 我需要在列表中存储任何类型的对象 2. 尽可能避免强制转换调用
为此,我试图想出一些东西。无论我尝试什么,我都无法摆脱拳击\拆箱。我想知道你们中是否有人遇到过可以实现它的东西。
我创建的类大多是无用的,除非您正在处理小型集合,因为就内存和性能而言,它需要 ArrayList 的 1.5 倍。我正在努力寻找方法来改进其中至少一个(最好是性能)。
任何反馈表示赞赏。
编辑
简而言之,我正在努力实现:
@winSharp93:是的,简而言之:List GenericGenericCollection = new List ();
GenericGenericCollection.Add(new string("a sonnet");
GenericGenericCollection.Add(42);
GenericGenericCollection.Add(new MyOwnCustomType);
再次编辑
我找到了两种方法: 1. 在 .NET 4 中,引入了一个新的“动态”关键字。如果将行替换为Object _o;
,dynamic _o;
则可以按原样使用代码。问题是虽然动态应该是动态类型,但性能就像拳击..
可以通过添加隐式(我更喜欢)或显式转换运算符而不是依赖通用 == 运算符来提高性能。
基于http://igoro.com/archive/fun-with-c-generics-down-casting-to-a-generic-type/我添加了以下课程。这需要处理装箱和性能 - 以下类性能比 int 或 Castable 的 ArrayList 稍好。当然,相比起来还有很长的路要走
List<int>
。从我的角度来看,唯一的问题是,一旦将对象分配给普通的 Any 对象以获得嵌入的具体类型AnyInternal<T>
。我也找不到方法T Get()
。甚至关键字动态在运行时在语句中失败:
Any.AnyInternal<dynamic> any = (Any.AnyInternal<dynamic>)anyInstanceContainingAnyInternalForInt;