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

C++元组元素类型可以基于模板参数有条件地添加吗?

常炯
2023-03-14

我正在尝试根据一些编译时条件,有条件地向元组模板类型添加类型,如下所示:

template <typename T>
class Base { ... }

template <int I>
class Derived : public Base<std::tuple<std::conditional<I % 8 == 0, int,    void>::type,
                                       std::conditional<I % 4 == 0, double, void>::type,
                                       std::conditional<I % 2 == 0, float,  void>::type>>
{ ... }

我知道这不是有效的代码,但从概念上讲,我试图有条件地向元组列表中添加类型。我希望在条件解析为void时跳过该类型。

有办法做这样的事情吗?

共有1个答案

景恩
2023-03-14

你的问题有一小部分无法计算:

std::conditional<I % 1 == 0, float,  void>:

由于任何整数除以1时的余数为0,因此该条件将始终为真。

不管这里的实际意图是什么,我将给出一个包含两个条件的示例,这些条件可以根据需要进行简单的扩展以包括附加的条件:

#include <tuple>
#include <functional>

template <typename T>
class Base {};

template <int I>
class Derived : public Base<
    decltype(std::tuple_cat(
             std::declval<
                std::conditional_t<I % 4 == 0,
                                  std::tuple<int>,
                                  std::tuple<>>>(),
             std::declval<
                std::conditional_t<I % 2 == 0,
                                  std::tuple<float>,
                                  std::tuple<>>>()
             ))>
{
};

Derived<4> a;

Base<std::tuple<int, float>> &b=a;

Derived<2> c;

Base<std::tuple<float>> &d=c;

这是利用了以下事实:std::tuple_catstd::tuple<>非常满意,我们只需使用它将正确的元组组合粘合在一起。

 类似资料:
  • 我有一些代码使用聚合物属性e <代码> polymer的工作方式是,我不能简单地说<code>force-shorrow=“false”,如果我想禁用该属性,必须将其完全删除。在Angular2中是否有方法有条件地删除整个属性?我似乎找不到关于这个话题的任何信息。我可以使用并重复整个元素,包括属性和不包括属性,但如果可能的话,我宁愿不这样做。谢谢 编辑 - 为什么将此问题标记为重复并关闭?我在有问

  • 问题内容: 是否可以根据条件向标签添加内容?像在此示例中一样,当我只想在第一次迭代中添加时(仅用于的第一个元素)? 问题答案: 是的,在这种情况下,AngularJS具有两个指令: 可以使用ng-show / ng-hide指令族基于评估表达式的结果来隐藏(通过使用显示CSS规则)DOM 3的一部分。 如果我们想有条件地物理删除/添加DOM的一部分,那么ng-switch指令家族(ng-switc

  • 本文向大家介绍aurelia 有条件地添加或删除HTML元素,包括了aurelia 有条件地添加或删除HTML元素的使用技巧和注意事项,需要的朋友参考一下 示例 与show.bind使用时不同,if.bind如果提供的绑定值是,则元素将从页面中删除;如果值为,则将元素false添加到页面中true。 分组元素 有时可能需要一次性添加或删除整组元素。为此,我们可以使用<template>元素来显示或

  • 我有以下一段代码: 有没有一种很好的方法可以有条件地添加元素,比如使用流操作?我只想在列表为空时添加method2中的元素,否则返回,以此类推。 编辑:值得一提的是,这些方法包含繁重的逻辑,因此需要防止执行。

  • 我正在尝试访问HTML代码中特定的元素。 定义元素的代码部分如下所示 。 在下面的第二行代码之后,我尝试声明表达式和,它们都返回java.lang.String类型的“oddrow cellcont” 但是,我尝试了下面的代码片段,它不能工作,因为循环中的条件返回false。我还尝试使用和、、、...以所有可能的组合使用if条件。 我肯定被困住了;我需要帮助。

  • 内建的 <template> 元素用来存储 HTML 模板。浏览器将忽略它的内容,仅检查语法的有效性,但是我们可以在 JavaScript 中访问和使用它来创建其他元素。 从理论上讲,我们可以在 HTML 中的任何位置创建不可见元素来储存 HTML 模板。那 <template> 元素有什么优势? 首先,其内容可以是任何有效的HTML,即使它通常需要特定的封闭标签。 例如,我们可以在其中放置一行表