如何在没有 2^n if 语句的情况下启动具有许多布尔参数的函数模板

2023-12-01

我有一个 CUDA (C++) 代码,专门出于性能原因而使用函数模板,这样该函数将只执行它需要执行的操作,而不是不断加载和读取布尔值来检查它是否需要执行操作。

所有模板参数都是布尔值。在启动内核时,CPU 检查布尔值并启动适当的(我相信这称为内核模板的“实例化”)。我知道这会导致代码大小呈指数级增长,但我的问题是其他问题:启动内核模板涉及 2^n if 语句,是否有更智能的语法?

例如,如果 n=2:

if(bool1){
    if(bool2){
        <true,true>func();
    }
    else{
        <true,false>func();
    }
}
else{
    if(bool2){
        <false,true>func();
    }
    else{
        <false,false>func();
    }
}

当 n=10 时,它变得不可接受,是否有语法可以避免这种恐怖?

例如我尝试过<bool1 ? true:false,bool2 ? true:false>func()但编译器不喜欢它......

将布尔标志更改为模板参数似乎在谈论类似的问题,但OP不仅仅有布尔值,而且提供的解决方案对我来说看起来比问题更糟糕,坦率地说,我一个字也不明白。


您可以添加一个重载func像这样:

template< bool... Bs >
void func()
{
    // Implement func with compile-time Bs...
}

template< bool... Bs, typename... Ts >
void func( bool b, Ts... ts )
{
    if( b ) {
        func< Bs..., true >( ts... );
    }
    else {
        func< Bs..., false >( ts... );
    }
}

int main()
{
    // call func< true, false, true, true >();
    func( true, false, true, true );
}

它的工作原理是将运行时布尔参数一一递归地转换为编译时参数。

实例

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

如何在没有 2^n if 语句的情况下启动具有许多布尔参数的函数模板 的相关文章

  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的

随机推荐

  • 如何让pyinstaller导入ttk主题?

    我已经完成了一个项目 如下所示 import tkinter as tk from tkinter import ttk import tkinter messagebox as tmb from ttkthemes import Them
  • 初始化没有对象类型的数组列表 - JAVA [重复]

    这个问题在这里已经有答案了 这个问题不是关于为什么我们将列表初始化为接口而不是实现 例如 List
  • 在哪里可以找到低级声音编程理论教程

    我是一名中级图形程序员 我想从头开始学习音频 声音处理理论 就像 一个像素 及其组成部分 R G B A 是图形编程的基本部分一样 我想了解类似的声音编程 谁能给我指出好的链接吗 我还想知道一些允许我操纵声音的库 最好是便携式的 可以直接处
  • 通过 ssh 发送带有 argjson 的 jq

    我正在尝试通过 ssh 运行 jq 命令来获取此 JSON nodes app nodes 1 is manager true ip 0 0 0 0 cpus 16 memory 64 data nodes 1 ip 0 0 0 0 cpu
  • 对用户隐藏 PHP

    有没有办法向用户隐藏我正在使用 PHP 的事实 我想这样做有两个原因 1 所以地址栏中的链接看起来更干净 就像 stackoverflow 上的这里一样 2 防止潜在的黑客立即知道要寻找什么 第 2 点是否现实 或者黑客是否会知道我在使用什
  • 如何根据滑块上滑块当前位置的滑块颜色更改 JFXSlider 滑块的颜色?

    我正在使用一个JFXSlider在JavaFX中 我使用了线性渐变的颜色JFXSlider的轨道 使用 CSS 但是 我还想将拇指的颜色更改为该位置滑块的颜色 我使用了以下 CSS 来实现滑块的线性渐变并消除滑块的默认绿色JFXSlider
  • Objective-C:导航栏中的背景图像和标题

    我的导航栏中需要背景图像和标题 对于图像我写了一个类别 implementation UINavigationBar MyNavigationBar void setBackgroundImage UIImageView aTabBarBa
  • 如何使用 jquery-mobile 获取点击事件的位置/坐标?

    Jquery mobile 支持这些事件 http jquerymobile com demos 1 0a3 docs api events html 如何获取移动设备上点击事件的位置 例如在图像内 myimg bind tap funct
  • 反序列化 List 对象

    我正在尝试将 XML 反序列化为对象 但我陷入了一种情况 任何人都可以帮我吗 XML
  • 保存为 JPEG with Pillow 的图像与原始图像不同。

    我有一个 3 d numpy 数组 并使用 Pillow 将其保存为 JPEG 图像 当我使用 Pillow 重新加载图像时 生成的 numpy 数组有所不同 我为此编写了一个演示代码 from PIL import Image impor
  • 将开始和结束锚标记之间的字符串替换为其他字符串

    我需要用其他字符串替换一对锚标记之间的字符串 更清楚地说 a Click Here a 我想更换 点击这里 与 img src 标签 我阅读了一些其他资源 尝试了 Lars Olav Torvik 的正则表达式工具 但严重失败 请帮帮我 不
  • 如何基于分段控件和添加按钮切换到 2 个视图?

    我在导航控制器的标头中有一个分段控件 我想将一个对象添加到也在该导航控制器中的表视图控制器中 这就是我的问题所在 如何从一个 UIButton 切换到 2 个视图中的 1 个 即每个分段控件选项的不同添加视图 您只能从故事板中的 UIBar
  • Excel 将 URL 转换为图像 (1004)

    我有一个链接到 SQL 数据库的 Excel 文档 其中包含几列图像 URL One of those URLs looks like this https imissit blob core windows net iris 596480
  • 将两个字符串作为数值进行比较

    我应该如何比较 C 中表示数字的两个字符串 我想转换为数量long longtype 但问题是 string 表示的数值可以超过long long最大限制 保证该字符串代表一个数值 Java中也有类似的问题比较两个数字字符串值 但这利用了
  • 如何将变量转换为json?

    我想将json数据发送到ajax 但是如何将变量转换为json或将数组转换为json confirm order click function event event preventDefault var street street val
  • 如何跨线程共享包含 Sender 和 Receiver 字段的结构?

    我有一个结构 大致如下所示 struct Node id Arc
  • 程序从windows启动? C#

    So 我已经构建了一个只需打开一个新程序的winforms winform中的代码是这样的 如果有人需要 Process a Process a Process Start notepad exe BUT 我需要知道如何让程序随 Windo
  • 整数数组中具有最大总和的子序列[重复]

    这个问题在这里已经有答案了 给定一个整数数组 如何找到两个索引 i 和 j 使得子数组中从索引开始和结束的元素之和最大化 在线性时间内 简单的 假设你得到了数组a 首先 计算数组s where s i a 0 a 1 a i 您可以在线性时
  • 添加按钮到 QVideoWidget

    每个人 我尝试为 QMediaPlayer 元素设置点击属性 但我找不到制作它的模式 如果我尝试将按钮放在视频前面 该按钮会放在视频后面 即使使用 button gt raise videoWidget gt lower 如果我按下按钮全屏
  • 如何在没有 2^n if 语句的情况下启动具有许多布尔参数的函数模板

    我有一个 CUDA C 代码 专门出于性能原因而使用函数模板 这样该函数将只执行它需要执行的操作 而不是不断加载和读取布尔值来检查它是否需要执行操作 所有模板参数都是布尔值 在启动内核时 CPU 检查布尔值并启动适当的 我相信这称为内核模板