使用模板元编程计算阶乘

2024-04-12

我不明白这段代码如何(来自维基百科) http://en.wikipedia.org/wiki/Template_metaprogramming works:

template <int N>
struct Factorial 
{
    enum { value = N * Factorial<N - 1>::value };
};

template <>
struct Factorial<0> 
{
    enum { value = 1 };
};

// Factorial<4>::value == 24
// Factorial<0>::value == 1
void foo()
{
    int x = Factorial<4>::value; // == 24
    int y = Factorial<0>::value; // == 1
}
  • 这个奇怪的模板是什么 需要<int N>?
  • 这第二是什么 奇怪的模板<>?
  • 什么是enum的报酬?
  • 有什么优势 使用这个而不是正常的 运行时阶乘计算?
  • 你们多久使用一次这个?我已经使用 C++ 一段时间了,但以前从未使用过它。我错过了 C++ 的多大一部分?

Thanks!


  • 这个奇怪的模板是什么?<int N>?

在 C++ 中,模板参数可以是类型(前缀为class or typename)或整数(前缀为int or unsigned int)。这里我们处于第二种情况。

  • 这第二个奇怪的是什么template <>?

template<> struct Factorial<0>是 Factorial 类模板的完整特化,这意味着0被认为是一个特殊值,对应于它自己的阶乘版本。

  • 枚举有什么用?

枚举是元编程 C++ 中计算值的方法

  • 与正常的运行时阶乘计算相比,使用它有什么优点?

首先创建此代码的原因是为了创建一个可以使用元编程完成微积分的概念证明。优点是生成的代码非常高效(调用Factorial<4>::value相当于在代码中简单地写入“24”。

  • 你们多久使用一次这个?我已经使用 C++ 一段时间了,但以前从未使用过它。我错过了 C++ 的多大一部分?

使用这种方法很少能实现这样的功能,但现在元编程的使用越来越多。看Boost 元编程库 http://www.boost.org/doc/libs/release/libs/mpl以获得可以做什么的提示。

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

使用模板元编程计算阶乘 的相关文章

  • 为什么在 C# 中成员初始值设定项中不允许这样做,但在 VB.Net Me 中允许

    我正在将 VB Net 应用程序转换为 C 并注意到在 VB Net 代码中 有一个私有成员变量 它是使用Me像这样 Private m ClassA As New MyCollection Of ClassA Me 当我将其转换为 C 代
  • gtest 和 gmock 有什么区别?

    我试图理解的目的google mock Google 的 C 模拟框架 https github com google googletest blob master googlemock README md 我已经与gtest较早 但我还是
  • 在桌面应用程序中,类库的连接字符串存储在哪里?我可以在app.config中使用吗?

    我是桌面应用程序开发的新手 目前正在使用分层架构 用户界面 DAL BLL 构建桌面应用程序 在 Web 开发中 我曾经将连接字符串存储在 web config 中 我的类库从那里访问它 请指导我在桌面应用程序中如何以及在何处存储 DAL
  • 使用 Selenium for C# 登录 Facebook

    我一直在使用 Selenium C 框架并尝试进行 facebook 登录 但没有任何运气 这是我到目前为止得到的 基于这篇文章 使用 Selenium 测试 Facebook Connect 应用程序 https stackoverflo
  • 具有多重继承的类的 sizeof

    首先 我知道 sizeof 取决于机器和编译器的实现 我使用的是 Windows 8 1 x64 gcc 5 3 0 没有标志传递给编译器 我从大学讲座中得到了以下代码 include
  • 如何在 C++ 中对静态缓冲区执行字符串格式化?

    我正在处理一段对性能要求非常高的代码 我需要执行一些格式化的字符串操作 但我试图避免内存分配 甚至是内部库的内存分配 在过去 我会做类似以下的事情 假设是 C 11 constexpr int BUFFER SIZE 200 char bu
  • 正则表达式删除某些字符周围不需要的空格

    我正在尝试从 JavaScript 文件中删除一些不需要的空格 并在将文件发送到客户端之前使用 C 和 Regex 组合文件 我有一个JavascriptHandler处理 js 文件 效果很好 这是我用来 打包 JavaScript 的函
  • C++ 中的 Java ArrayList [重复]

    这个问题在这里已经有答案了 在Java中我可以做 List
  • 使用成员作为实现者来实现接口

    我有实现 IA 的 A 类 现在我需要创建也应该实现 IA 的类 B B 类有 A 类的实例作为成员 有什么方法可以定义A的实例实现B类中的IA吗 interfase IA void method1 void method2 void me
  • 如何防止字符串被截留

    我的理解 可能是错误的 是 在 C 中 当你创建一个字符串时 它会被实习到 实习生池 中 这保留了对字符串的引用 以便多个相同的字符串可以共享操作内存 但是 我正在处理很多很可能是唯一的字符串 一旦完成每个字符串 我需要将它们从操作内存中完
  • 从窗口内容截取屏幕截图(无边框)

    我正在寻找有关如何使用 C 将表单内容保存在位图中的解决方案 我已经尝试过使用 DrawToBitmap 但它捕获了所有带边框的窗口 这就是这段代码的结果 public static Bitmap TakeDialogScreenshot
  • 枚举器上的 [[maybe_unused]]

    查看规格 maybe unused http en cppreference com w cpp language attributes 它指出 出现在类 typedef 变量 非静态数据成员 函数 枚举或枚举器的声明中 如果编译器对未使用
  • 在不使用 Thread.Sleep c# 的情况下延迟发送电子邮件

    我有一个 for 循环 它循环并每个循环发送一封电子邮件 现在我正在使用 thread sleep 但我希望用户仍然能够与程序交互 只需取消该循环即可 是否可以在不使用 thread sleep 的情况下做到这一点 您是否在 UI 线程上运
  • 简单的文档管理系统和API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • .Net Core 中的脚手架以及解决方案中的多个项目

    我创建了一个针对 net461 的 Net Core MVC6 应用程序 我使用了一个我非常熟悉的项目结构 其中我将数据 模型和服务类放置在单独的类库项目中 并且 Web 项目引用这些项目 当我尝试搭建控制器时 我收到一条错误 指出我正在搭
  • Qt:将拖放委托给子级的最佳方式

    我在 QWidget 上使用拖放 我重新实现了 DragEnterEvent dragLeaveEvent dragMoveEvent 和 dropEvent 效果很好 在我的 QWidget 中 我有其他 QWidget 子级 我希望它们
  • 如何从代码隐藏中向我的 div 添加点击事件?

    如何从代码隐藏中向我的 div 添加点击事件 当我点击 div 时 会出现一个消息框 其中显示 您想删除它吗 并在框中显示 是 或 否 全部来自后面的代码 while reader Read System Web UI HtmlContro
  • C 中的 N 依赖注入 - 比链接器定义的数组更好的方法?

    Given a 库模块 在下文中称为Runner 它作为可重复使用的组件 无需重新编译 即静态链接库 中应用程序分区架构的 而不是主分区 请注意 它仅包含main 出于演示目的 Given a set 顺序无关 调用的其他模块 对象Call
  • win32 API 和 .NET 框架之间的选择

    我必须开发一个适用于 Windows 的应用程序 该应用程序将能够通过网络摄像头识别手势来控制鼠标 我将使用 vc 2008 进行开发 但我很困惑是使用 NET 框架还是核心 win32 API 性能对于我的应用程序非常重要 根据 Ivor
  • 如何向 ItemsControl 中的 WPF 按钮添加相同的命令

    如何将命令添加到 wpf 按钮 该按钮是ItemsControl并正在修改ItemsSource itself 这是我的 XAML

随机推荐

  • Python GUI 在整个过程完成之前不会更新

    我有一个进程从目录中获取文件并将它们放入列表中 然后它循环迭代该列表 循环的最后一行是它应该更新我的 gui 显示的位置 然后它再次从列表中的下一项开始循环 我的问题是 在整个过程完成之前 它实际上不会更新 gui 这取决于列表的大小 可能
  • 在 slickgrid 上调用排序

    在 slickgrid 中 我可以使用以下命令设置排序列及其排序方向grid SetSortColumn colName true false 这仅设置排序字形 但不进行排序 有没有办法调用排序事件处理程序 我已经定义了排序处理程序 例如g
  • 析构函数应该是线程安全的吗?

    我正在查看遗留代码并发现以下片段 MyClass MyClass EnterCriticalSection cs Access Data Members NO Global members are being accessed here L
  • 在 .net 中,如何在 Decimal 和 Double 之间进行选择

    前几天我们在工作中讨论了这个问题 我希望有一个 Stackoverflow 问题我可以向人们指出 所以就在这里 和有什么区别Double http msdn microsoft com en us library x99xtshc VS 7
  • Rails 3 - RMagick 使用 Paperclip 找不到 libfreetype.6.dylib

    我正在尝试使用回形针上传一些图像 它工作正常 但如果我想添加一些样式 styles gt small gt 100x100 它不再工作了 我收到此错误消息 myImage 识别 命令无法识别 所以 我在网上找到了一些提示 我用 Brew 安
  • scala 控制台错误:对象 apache 不是包组织的成员

    我正在尝试这里建议的代码 http spark apache org docs 1 2 1 mllib ensembles html classification http spark apache org docs 1 2 1 mllib
  • protobuf net 是否支持列表/数组内共享引用的对象图?

    看来 protobuf net 不支持列表 数组的 AsReference 以及列表 数组内对象的 AsReference 最终 v2 会支持此功能吗 ProtoMember 1 AsReference true DynamicType t
  • AngularJS $watch 函数如何工作?

    我现在读了很多关于 AngularJS 的文章 并且遇到了神奇的 watch 函数 我知道如何使用它 但我想知道它在后台是如何实现的 是时间间隔函数吗 或者是 Angular 会在执行的每个语句中调用此监视 我现在不想深入研究源代码 如果你
  • Rails:将子域路由到资源

    是否可以将子域映射到资源 我有一个公司模型 目前 使用 subdomain fu 我的路由文件包含 map company root controller gt companies action gt show conditions gt
  • [R=301] 和 [R=301,L] 有什么区别?

    谁能与我分享一下两者之间的区别 R 301 and R 301 L 在 301 重定向中 哪个最适合重定向 url 虽然两者都工作得很好 但我确实注意到 R 301 L 将 URL 更改为新 URL 同时 R 301 仅重定向内容 有人可以
  • Windows API `GetPixel()' 总是返回 `CLR_INVALID`,但是 `SetPixel()` 效果很好?

    我的操作系统是 windows 7 64 位 有 2 个显示器显示 I use GetPixel 但它总是返回CLR INVALID结果是这样的 COLORREF result GetPixel dc x y My GetDeviceCap
  • IIS 7.5、Web 服务和 HTTP 405 错误

    我有一个在我的机器上托管的网络服务 我使用 Windows 7 和 IIS 7 5 Problem 当客户端尝试使用 Web 服务时 他 她会收到 HTTP 405 错误 在 IIS 的日志文件中 我可以看到此操作被拒绝 因为不允许使用 P
  • 使用 R 获取总和为 100 的所有组合

    我需要使用 8 个变量来获取总和等于 100 的所有组合 这些变量可以按 10 的增量步长取 0 到 100 之间的任何值 即 0 10 20 100 下面的脚本就是这样做的 但是效率非常低 因为它创建了一个巨大的数据集 我想知道是否有人有
  • numpy 中的多维布尔数组索引

    我有两个二维数组 一个是数字数组 一个是布尔值数组 x array 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4
  • 我如何通过 linq to xml 从 xml 获取所有“属性”

    XML 示例 原始链接 http twitpic com 150f61
  • 如何为xjc编写外部绑定文件?

    JAXB 的文档xjc http java sun com webservices docs 1 6 jaxb xjc html says b 指定一个或多个要处理的外部绑定文件 每个绑定文件必须有自己的 b 开关 外部绑定文件的语法非常灵
  • 数据框列值与列表的比较

    考虑这个数据框 df pd DataFrame A 1 1 2 2 3 3 B 10 15 20 25 30 35 C 100 150 200 250 300 350 这是获取 C 列值的代码 它是每组的第一行 A 列 firsts df
  • 如何找到两条曲线之间的相似度以及相似度得分?

    我有两个数据集 t y1 和 t y2 这些数据集在视觉上看起来相同 但它们存在一些时间延迟或幅度变化 我想找到两条曲线之间的相似度 对于近似相似的曲线给出相似度得分 1 对于不相似的曲线给出相似度得分 0 由于数据的波动 一些曲线似乎有所
  • R 通过多列进行互相关

    我有一个这样的数据表 gt head my data V1 V2 V3 V4 V5 1 36045 49933 41622 29491 34393 2 36874 44752 44158 40561 36045 3 45008 51964
  • 使用模板元编程计算阶乘

    我不明白这段代码如何 来自维基百科 http en wikipedia org wiki Template metaprogramming works template