当前位置: 首页 > 知识库问答 >
问题:

如何给一个变量分配组合视图?

冯嘉荣
2023-03-14

有没有办法让这个和C 20一起工作?

auto view = std::views::all;

if (condition1) {
    view = view | std::views::filter([](int i) {
        return i%5 == 0;
    });
}

if (condition2) {
    view = view | std::views::filter([](int i) {
        return i%10 == 0;
    });
}

/* Do something with the view */
for (int i : list | view) {
   ...
}

我得到这个丑陋的错误:

test.cpp:13: 10:错误:不匹配'操作员='(操作数类型是'std::范围::视图::__adaptor::_RangeAdaptorClosurestd::范围::视图::

我尝试谷歌搜索一些范围阿普托关闭的东西,但它没有多大意义

共有1个答案

任飞龙
2023-03-14

不,这不是可行的代码。C是一种静态类型化语言,您正在有条件地构建的每个视图都是不同类型的。C不允许您更改现有对象的类型(至少,不是这样)。

因此,这些类型的运行时有条件的事情不容易完成。您的案例很简单,因为您只使用filters,并且您可以完全控制过滤器本身。因此,您可以将条件逻辑推入过滤器中。

但是任何比这更复杂的东西,或者不受filter控制的东西,都是行不通的。

有很多方法可以在编译时条件下做到这一点,但是从元编程的角度来看,这些方法往往很糟糕。

 类似资料:
  • 问题内容: 我想了解原始和对象引用变量的行为方式不同。我以Kathy Sierra的 OCA / OCP Java SE7中 的以下代码为例: 在上面的代码中,我获得了更改之前和之后的值。 基本变量case的输出为: 但是,在对象引用变量中,一旦更改了的值,我将获得不同的值 参考变量大小写的输出为: 书中提到在两种情况下都复制位模式并放置新副本。如果这是真的,那为什么我们会得到不同的行为呢? 问题

  • 问题内容: 我在Javascript中有一组全局计数器变量: 等等 然后,我有了一个Javascript函数,该函数接受一个映射到这些全局计数器的“索引”数字。在此函数内部,我需要使用传递给该函数的“索引”值来读写这些全局计数器。 我希望它如何工作的示例,但当然根本不起作用: 我希望我要实现的目标是明确的。如果没有,我会尽力澄清。谢谢。 编辑说明: 我不是要增加计数器的名称,而是要增加计数器包含的

  • 问题内容: 我正在使用以下代码: 该值不警报。怎么了 问题答案: 实质上:

  • 我想将引用分配给变量p: 这样我就可以像这样使用它: 表达式[1]产生编译错误,如何解决? 线程"main"中的异常java.lang.错误:未解决的编译问题: PrintStream类型中的println(Object)类型为void,这与描述符的返回类型void不兼容 如果将更改为,则错误变为: 线程“main”java中出现异常。lang.错误:未解决的编译问题:语法错误,插入“维度”以完成

  • 问题内容: 在Python中,我们可以将函数分配给变量。例如,math.sine函数: 有没有简单的方法可以将多个函数(即一个函数的一个函数)分配给一个变量?例如: 问题答案: 我认为作者想要的是某种形式的功能链。通常,这很困难,但是对于 接受一个论点 返回一个值, 列表中上一个函数的返回值与列表中下一个函数的输入类型具有相同的返回值 我们说有一个需要链接的函数列表,其中有一个参数,然后返回一个参

  • 问题内容: Python在一行中实际上分配多个变量的实际步骤是什么? 我过去经常做A [0],A [1] = A [1],A [0]交换,但是最近我在分配链接列表时遇到了一个错误。 变得早于我的预期,所以分配成为 但是,如果我这样做 有用! 我“假设”步骤是 不 那么,这些步骤是什么? 问题答案: Python中有一种叫做“扩展分配”的东西。 长话短说,您可以通过任务扩展迭代。例如,以下代码评估并