- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
据我了解,boost.variant 的所有类型被解析成真正的类型(意思好像 boost variant<int, string> a; a="bla-bla"
会在编译后变成 string a; a="bla-bla"
)所以我想知道:如何让什么类型被放入 boost 变体?
我尝试了什么:
#include <boost/variant.hpp>
#include <boost/function.hpp>
#include <boost/shared_ptr.hpp>
#include <iostream>
int main()
{
typedef boost::function<double (double x)> func0;
typedef boost::function<double (double x, double y)> func1;
typedef boost::variant<int, func0, func1> variant_func;
func1 fn = std::plus<double>();
variant_func v(fn);
std::cout << boost::get<func1>(v)(1.0, 1.0) << std::endl; // this works
//std::cout << boost::get<v::type>(v)(1.0, 1.0) << std::endl; // this does not compile with many errors
// std::cout << (v)(1.0, 1.0) << std::endl; // this fails with Error 1 error C2064: term does not evaluate to a function taking 2 arguments
std::cin.get();
return 0;
}
最佳答案
v.which()
将返回当前持有的对象类型的从 0 开始的索引。
当您检索对象时,您的代码必须使用静态类型(为了满足 get<T>
函数模板)来引用(有效)动态类型的对象。
您需要测试类型(使用 which()
或 type()
)并相应地分支或使用静态访问者。无论选择哪种方式,都必须显式声明要检索的静态类型,并且必须与动态类型匹配,否则将引发异常。
解决此问题的一种方法是,不要直接使用变体类型,而是使用内部包含变体类型的类,然后定义使用该对象所需的任何隐式转换运算符。
我有一个名为 Dynamic C++ 的项目它使用了这种技术。
关于c++ - boost 变体 : how to get currently held type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8344080/
我正在使用Timelines,并希望将一些KeyPress事件连接到舞台,这些事件可以改变时间线在其运行过程中更改属性的方式. 我知道如何区分按下的键和我想听的键,但需要知道如何确定某个键是否刚刚被按
(使用 ubuntu 14.04.3)我需要安装 libx32gcc-4.8-dev libc6-dev-i386。当我尝试通过写来下载它时: sudo apt-get install libx32g
早上好,我正在处理 DoExpressCheckout 的支付状态响应,用于 InstantPaymentOnly Sale。 https://developer.paypal.com/docs/cl
我在 Wikipedia 之后用 Java 实现了 Held-Karp它给出了一个循环总距离的正确解决方案,但是我需要它给我路径(它不会在开始的同一个顶点结束)。如果我从循环中取出权重最大的边,我可以
我发现在任何使用按键监听器的类中实现的方法包括 keyPressed、keyReleased 和 keyDown,但是如何才能在按键保持按下状态时连续发生某些事情?意思是有没有办法实现“keyHeld
我正在尝试在 Windows 应用程序的 bridview 中突出显示所选项目。 更准确地说:
当 bundle 在 MVC4 中注册时,什么负责“拦截”对 /bundles/someBundle?v=1hDzBpmYJm4Iu-OjRN1YqS1WeNThVl0kStLJGP8WCr41 的传
我很清楚旅行商问题的 DP 解决方案;也称为 TSP 的 Held 和 Karp 算法。 我用位掩码实现了它,它是这样的: int TSP(int pos, int bitmask) { if (
我试图弄清楚是什么导致我的程序挂起,我的大部分锁不应该持有超过 200 毫秒。 (实际上要少得多!) 我想创建两个新函数(Lock() 和 Unlock()),这样 Lock 就会有一个计时器,如果
我的 LibGDX Android 游戏在加载过程中随机崩溃。我想这与 Android 由于主线程中长时间运行的任务或内存问题而杀死我的应用程序有关。 在这方面,我想了解日志中这些行的含义: 03
我正在开发一个电子邮件应用程序,并将消息类作为文件保存。不过,我对电子邮件的操作有一些疑问。 例如, 有一条消息将其类作为文件保存,但当用户想要删除它时,如果我从文件中获取消息类,并且在调用folde
当光标通过 contains(p) 方法在矩形数组列表上移动时,我需要更改光标。问题是 我的第一个使用迭代器迭代矩形的算法无法按预期工作。光标仅在将鼠标悬停在第一个矩形上时才会发生变化,在其他矩形中它
我将数据分为训练样本和测试样本 (70/30),用于基于回归预测的问题(MLP、LSTM 等)。 在代码中: history = model.fit(X_train, y_train, epochs=
我使用 Java 实现的 Held-Karp TSP algorithm解决 25 个城市的 TSP 问题的算法。该计划通过 4 个城市。 当它在 25 个城市运行时,它不会停几个小时。我使用 jVi
据我了解,boost.variant 的所有类型被解析成真正的类型(意思好像 boost variant a; a="bla-bla" 会在编译后变成 string a; a="bla-bla" )所
使用在我的交互式 session 中运行的 IIS Express 中的 System.Diagnostic.Process.Start(),我可以执行运行 的程序作为不同的用户 具有校正功能。不幸的
我正在使用动态规划修改 TSP 的 Bellman–Held–Karp 算法。在这种情况下,经典 Bellman-Held-Karp 算法的不同之处在于某些城市必须先于其他城市被访问,但我需要保留最小
MouseEvent类具有属性 altKey , ctrlKey和 shiftKey我可以用它来确定在事件发生时是否按下了修饰键(即 Alt、Ctrl 和 Shift)。 但我想确定是否空间 在 Mo
在我的 NSView 子类中,例如,当我键入 Command+J 时,我会看到按下 Command 的 flagsChanged: ,然后按下 J 的 keyDown: 。 ..然后释放命令的flag
我目前正在为 chrome 开发一个扩展程序,它根据特定网页的快捷键执行操作。现在我正在使用“命令”API 来判断何时按下快捷键(https://developer.chrome.com/extens
我是一名优秀的程序员,十分优秀!