如何在运行时填充 boost::fusion::vector ?

2023-12-20

首先,为与我之前的问题相似而道歉here https://stackoverflow.com/questions/13094535/iterating-over-boost-fusionvector,但我认为我问得不对。

我有一个方法:

template <typename T>
void some_method( T &t)
{...}

它需要一个类型fusion::vector<T1, T2, T3, ..., Tn>在运行时确定 - 例如vector<int, double>一次通话即可vector<int, double, int>在另一个。

我想用以下内容动态填充这个向量:

int blah = 5;
for(int i = 0; i<size(t); i++){
at_c<i>(t) = blah;
}

这不起作用,因为 at_c 期望const.

我尝试过其他东西(请参阅上一个问题),但仍然无法弄清楚如何实现这一目标。

非常感谢任何帮助! 谢谢。


由于@Mankarse正确指定,你不能使用fusion容器在一个for循环,那是因为fusion容器就是关于tuple并且每个元素可能具有与其他元素不同的类型,所有迭代的函数fusion容器实际上是几个函数,通常实现为template或重载函数。所以为了初始化一个fusion容器从vector你应该有多个函数(或者只是一个将被编译为多个类或函数的模板),它们都可以访问该向量(或者至少是一个迭代器)vector以及每次调用都会增加的状态变量)。所以你有两个选择:

1)使用boost::fusion::fold:

template< class StdIteratorT >
struct initialize_fusion_container_from_std_iterator {
    typedef StdIteratorT    result_type;

    template< class T >
    StdIteratorT operator()( StdIteratorT i, T& val ) {
        val = *i;
        return ++i;
    }
};
void use_fold_demo() {
    int p1[] = {4, 5, 6};
    fusion::vector<int, double, int> fv;
    std::vector<int> sv2( p1, p1 + _countof(p1) );
    fusion::fold( fv, sv2.begin(),
    initialize_fusion_container_from_std_iterator<std::vector<int>::iterator>() );
}

2)编写一个函数,用容器的下一项递归地调用自身(记住这个函数的语法类似于递归函数,但它根本不是递归的):

// this will be called when we reach end of the fusion container(FIBeginT==FIEndT)
template< class FIBeginT, class FIEndT, class StdIteratorT >
void set_fusion_iterator( FIBeginT b, FIEndT e, StdIteratorT i, boost::mpl::true_ )
{
}
// this will be called when FIBeginT != FIEndT
template< class FIBeginT, class FIEndT, class StdIteratorT >
void set_fusion_iterator( FIBeginT b, FIEndT e, StdIteratorT i, boost::mpl::false_ )
{
    *b = *i;
    set_fusion_iterator( fusion::next(b), e, ++i,
        fusion::result_of::equal_to<
            typename fusion::result_of::next<FIBeginT>::type, FIEndT >() );
}

void recursive_function_demo() {
    typedef fusion::vector<int, double, int>    my_fusion_vector;

    int p1[] = {1, 2, 3};
    std::vector<int> sv1( p1, p1 + _countof(p1) );
    fusion::vector<int, double, int> fv;
    set_fusion_iterator( fusion::begin(fv), fusion::end(fv), sv1.begin(),
        fusion::result_of::equal_to<
            typename fusion::result_of::end<my_fusion_vector>::type,
            typename fusion::result_of::begin<my_fusion_vector>::type>() );
}

正如你所看到的,第二种情况要复杂得多,但是如果你理解它的逻辑,你可以用它来做任何事情fusion容器,所以选择权都在你手中!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在运行时填充 boost::fusion::vector ? 的相关文章

  • 如何在运行 ASP.NET 页面时以编程方式设置表格背景?

    我有一个 aspx 页面 其默认背景颜色是一种 当选择单选按钮的某个选项时 我需要能够以编程方式更改它 我尝试设置表的 ID 字段 但似乎无法在 C 代码隐藏文件中访问它 我原来的表是 table style width 100 backg
  • 如何在自定义保存操作 WFFM 中获取 Sitecore.Current.Site 对象?

    我在用着面向营销人员的 Sitecore 网络表单 在里面save action我得到的表格Sitecore Context Site对象 但该对象没有返回正确的上下文 该值为 modules shell 有谁知道我如何才能获得正确的上下文
  • 递归显式模板实例化以导出库的符号

    在我之前的问题中我问过递归显式模板实例化是否可能 https stackoverflow com questions 7395113 is recursive explicit template instantiation possible
  • 有没有一种简单的方法来获取 .NET 为参数化查询生成的“sp_executesql”查询?

    背景 如果我有以下程序 public class Program public static void Main using var connection new SqlConnection Server local Database Te
  • 字典的线程安全

    如果我有一个 Dictionary
  • iPhone 编程游戏

    使用 Objective C 还是 C 为 iPhone 编写游戏最好 像 Flight Control 这样的游戏会用什么语言编写 图形应采用什么格式才能在 iPhone 上正确显示并快速加载 像 Flight Control 这样的游戏
  • 轮廓积分算法 C++

    我正在尝试编写一个应用数学程序来计算复平面中的轮廓积分 对于初学者来说 我想为梯形方法编写一个算法 但我有点坚持理解它会是什么样子 毕竟 我们通常将梯形方法视为 2D 图 而这里我们有 f C gt C 所以我们谈论的是 4D 最终我希望用
  • 本机 C++ 通过代理 C++ 托管 dll 使用 C# dll

    这相当复杂 所以请耐心听我说 我有一个用本机 仅限 Win32 C 编码的第 3 方程序 目标 作为目标设计的一部分 它实现了一个 dll 插件系统 本机 DLL 当放置在程序的 ext 目录中时 由目标加载 然后 目标根据需要调用每个 D
  • flowlayoutpanel和水平滚动条问题

    我正在使用一个 flowlayoutpanel 它有很多逻辑上的按钮 我遇到的问题是 当我调整窗口大小时 当窗口变小时 我无法看到所有水平排列的按钮 相反 当窗口变小时 按钮会下降到下一行 谁能帮我解决这个问题 我只是希望按钮水平排列 当窗
  • 在 C++ 中从另一个数组初始化结构内的数组[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions struc
  • 从动态服务器中抓取 html 列表数据

    哈喽大家好 抱歉提出转储问题 这是我最后的手段 我发誓我尝试了无数其他 Stackoverflow 问题 不同的框架等 但这些似乎没有帮助 我有以下问题 一个网站显示一个数据列表 前面有大量的 div li span 等标签 它是一个很大的
  • DLR 返回类型

    我需要 DLR 的帮助 我正在实现 IDynamicMetaObjectProvider 和 DynamicMetaObject 但在获取预期返回类型时遇到一些问题 我在元对象中覆盖 BindInvokeMember 我可以看到所有参数类型
  • std::make_shared 作为默认参数无法编译

    在 Visual C 2008 和 2010 中 以下代码无法编译并出现以下错误 include
  • 将控制台输入和输出重定向到文本框

    您好 提前致谢 我正在尝试 非常努力 将控制台输入和输出重定向到文本框 到目前为止 输出工作正常 但问题在于输入 例如 我无法执行一个简单的程序来执行以下操作 Console WriteLine 请输入您的姓名 字符串名称 Console
  • 变形:Opencv 使用 Visual Studio 将图像显示到曲面屏幕

    我正在尝试使用 opencv API 来扭曲图像 以便将其显示到曲面屏幕上 我已经浏览了opencv中提供的翘曲apihere http docs opencv org 2 4 modules stitching doc warpers h
  • OpenCV:处理每一帧

    我想使用 OpenCV 编写一个跨平台应用程序进行视频捕获 在所有示例中 我发现来自相机的帧是使用抓取功能进行处理并等待一段时间 我想处理序列中的每一帧 我想定义自己的回调函数 每次当一个新帧准备好处理时都会执行该函数 例如直播对于 Win
  • 创建 PING 程序时限制 ICMP 回显答复

    我正在编写一个多线程 ping 程序 我在每个线程 针对每个 IP 上创建了原始套接字 并使用 sendto 向每个线程发送了 ICMP Echo 请求 然后在每个线程中执行了 receivevfrom 我正在从各种套接字中的 IP 获取消
  • 我使用 tm/mktime 是否错误,如果没有,有解决方法吗?

    我认为下面的程序应该输出从公元 1 年到 1970 年每年第一天到 1970 年的秒数 前面是time t在编译它的系统上 CHAR BIT是一个宏 所以我认为你不能只是复制编译后的可执行文件并假设它是正确的 尽管实际上一切都使用 8 位c
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 所有区域的启用保护模式必须设置为相同的值(启用或禁用)

    我正在尝试使用Selenium Internet Explorer驱动程序 但当我尝试实例化它时它崩溃了 TestInitialize public void TestInitialise ieDriver new InternetExpl

随机推荐

  • 为什么 GCC 发出“lea”而不是“sub”来进行减法?

    我正在查看一些通过反汇编一些 C 程序生成的程序集 我对经常重复看到的单个优化感到困惑 当我没有对 GCC 编译器进行优化时 使用subl减法指令 但是当我打开优化时 O3准确地说 编译器使用leal指令而不是减法 示例如下 没有优化 83
  • 从 HttpInterceptor 中的 catchError 返回可观察到的捕获错误会导致错误循环

    我有一个简单的拦截器 可以处理请求并使用 RXJS catchError 捕获任何 http 错误 catchError 中收到的第二个参数是捕获的可观察值 在某些情况下 我想返回此错误并让它传播到订阅函数中的错误处理程序 问题是返回捕获的
  • mingw ld 找不到搜索路径中存在的某些库

    我用的是vim mingw 不知何故 终端还是window命令 所以我用谷歌搜索 并使用mintty 但是当运行 vim 时 它会永远挂起 直到我输入 C c i find 这一页 https code google com p mintt
  • 在 GCC 4.8 上构建 Python (2.7) 模块失败

    我正在尝试使用 C API 构建 Python 模块 扩展写入 但失败了 python2 cmath py build running build running build ext building c math extension cr
  • DataGridView 未在 C# 中更新[重复]

    这个问题在这里已经有答案了 有人能解释一下发生了什么吗 将代码 1 更改为代码 2 可以解决问题 尽管理论上应该没有区别 理论撞击实践就像南瓜撞击砖墙 Code 1 OutputDataGridView DataSource myList
  • 不等待 AJAX 请求的响应

    假设我从 jQuery 向后端 PHP 脚本发出 AJAX HTTP 请求 发出请求后 PHP 脚本开始运行并发挥其魔力 假设我随后更改为另一个网站 远离发出原始 AJAX 请求的网站 同样 我在 PHP 脚本完成之前执行此操作 并且有时间
  • 查找两个已排序数组的前 k 个和

    给定两个已排序的数组 大小分别为 n 和 m 你的任务 如果你选择接受它 是输出以下形式的最大 k 和a i b j O k log k 解决方案可以在这里找到 http www ocf berkeley edu wwu cgi bin y
  • 获取附件的 url

    我正在使用 CouchApp 构建一个简单的 Web 应用程序 允许上传和管理图片 实际的图像文件作为文档的附件存储 如下所示 id 09fe82d75a26f9aa5e722d6b220180d2 rev 2 5797b822c83b9d
  • 如何在 sed 的命令中使用变量?

    I have abc sh exec ROOT Subsystem xyz sh 在 Unix 机器上 如果我打印echo HOME然后我得到 HOME COM FILE 我想更换 ROOT with HOME使用 sed 预期输出 exe
  • iPhone:禁用“双击空格键。”捷径?

    默认情况下 如果您在 iPhone 或 iPad 上点击空格键两次 则不会得到 两个空格 而是得到 句点后跟一个空格 有什么方法可以在代码中禁用此快捷方式吗 更新 通过 UITextInputTraits 禁用自动更正不起作用 更新2 明白
  • Scala中涉及抽象类型时没有动态绑定?

    当我在 Martin Odersky 的抽象类型中尝试动物 食品示例时Scala 编程 class Food abstract class Animal type SuitableFood lt Food def eat food Suit
  • 将 vue-router 组件解释为一个函数

    我在几个不同的地方看到了以下类型的路由定义 path dashboard component render c return c router view children path component Dashboard 我试图理解这有什么
  • Linux 中的 SDL 桌面分辨率检测[重复]

    这个问题在这里已经有答案了 我收到一些报告称 对于某些 Linux 用户 尤其是使用 SteamOS 的用户 我的游戏以错误的分辨率打开 游戏尝试检测当前桌面分辨率并使用该分辨率创建无边框全屏窗口 例如 SteamOS 的分辨率通常为 19
  • java.lang.StackOverflowError:在 ListView 适配器中启用/禁用 TextView#setTextIsSelectable 时堆栈大小为 8MB

    我有一个活动ListView 显示TextView在每个列表项中 使用这些方法切换选定位置的属性EditText setTextIsSelectable EditText setEllipsize EditText setSingleLin
  • XCTest相对于SenTestingKit有哪些优势?

    我想在 iOS 中进行单元测试 默认情况下 测试类是使用 Xcode 5 中的 XCTest 框架类创建的 我在早期版本的 iOS 中使用了 SenTestingKit 这两个框架有什么区别 XCTest框架有哪些优势 我用谷歌搜索了相关文
  • 材料表使行在单击时可编辑

    使用材料表 https material table com 库中 我试图使表行可以通过双击进行编辑 单击该行应该与单击操作列最左侧的编辑按钮具有相同的效果 我已成功链接到正确的事件处理程序 现在双击一行时由警报框表示 https code
  • kohana3.0如何彻底删除镜像文件?

    我有一个 kohana3 0 内容和文件管理系统 当用户删除图像时 我希望能够从数据库以及我上传图像的文件夹中完全删除图像 现在我用于图像删除 public function delete id NULL parent delete id
  • gdb - 执行命令n次

    我正在使用 gdb 调试器来运行一个包含循环的程序 让我们坐在 10 中 当我进入循环时 我不想进入它 我知道我可以在循环之后设置第二个断点 而不是 c 继续 但我也记得有可能做类似 n 10 接下来的 10 次 的事情 n 10 不起作用
  • 如何使用 Ansible 创建新分区

    当我在命令行上运行它时 它工作正常 echo e n np n1 n n nw sudo fdisk dev sdb 但在 Ansible 中它不想在 shell 中运行 name partition new disk shell echo
  • 如何在运行时填充 boost::fusion::vector ?

    首先 为与我之前的问题相似而道歉here https stackoverflow com questions 13094535 iterating over boost fusionvector 但我认为我问得不对 我有一个方法 templ