使用左值引用作为非类型模板参数[关闭]

2024-03-02

我读到以下类型允许作为非类型模板参数:

  • 整数类型
  • enum
  • ptr 到对象/方法
  • 对对象/方法的左值引用
  • std::nullptr_t

我不明白如何接受非常量指针或左值引用?它们不应该是常量类型,以便在编译时被识别吗?

显然我并不比标准聪明,所以有人可以向我展示一个左值引用的示例,也许还有一个用作非模板参数的指针?


下面是一个示例,其中同时具有方法指针和左值引用作为非类型模板参数:

int delete_counter_1 = 0;
int delete_counter_2 = 0;

template<int& ctr>
void increment_counter() { ++ctr; }

template<void(*func)()>
class Deleter {
    public:
    ~Deleter() { func(); }
};

int main() {
    { /* Internal scope */
      Deleter<increment_counter<delete_counter_1>> a, b;
      Deleter<increment_counter<delete_counter_2>> c;
    }
    std::cout << "Counter1: " << delete_counter_1
              << "; Counter2: " << delete_counter_2
              << '\n';
    return 0;
}

看到它coliru http://coliru.stacked-crooked.com/a/8d7c409407f52d68.

有趣的是Deleter类的特点是它没有实际的数据成员;它的析构函数可以直接内联,无需间接函数调用。

正如 Dalibor Frivaldsky 在评论中提到的,重点是(实例化的)函数delete_counter<int&>并且计数器本身具有编译时已知的固定地址,因此作为指针它们的值是恒定的。特别是,这只适用于具有静态生命周期的对象;自动(“堆栈分配”)对象不起作用,非静态类成员也不起作用,但静态对象(如上所述)和静态类成员就可以了。

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

使用左值引用作为非类型模板参数[关闭] 的相关文章

随机推荐

  • 尝试将本地页面加载到 JavaFX webEngine 中

    我的 JavaFX 应用程序的选项卡上有一个 webView 组件 我正在尝试将本地存储的 HTML 页面加载到 WebView browser new WebView WebEngine webEngine browser getEngi
  • 监听附加端口 Microsoft Azure Nodejs

    我正在端口 process env PORT 1337 Microsoft Azure 上的默认端口 上运行 Nodejs 应用程序 Azure Web App 我还需要监听 websocket 的附加端口 在我本地 我使用的是 8000
  • 如何禁用 DateTimePicker 控件上的某些日期?

    如何禁用选定的日期DateTimePicker这样用户就无法选择它们 我知道这在 Web 窗体中是可能的 但在 Windows 窗体中我无法执行此操作 我怎样才能实现这个目标 您执行此操作的难易程度取决于您想要限制的日期 例如 如果您只想指
  • 如何从 Android 电话簿中选择联系号码到我的应用程序中?

    全部 我想从我的应用程序数据库中的android电话簿中获取号码 我已经用下面的代码尝试过 但这里正在获取人名 而不是我想要电话簿中的号码并希望将其存储在我的数据库中 如何实现这一目标 任何人都可以指导我 Override public v
  • 如何存储通用引用

    我需要在类中存储通用引用 我确信引用的值将比类的寿命更长 有这样做的规范方法吗 这是我想出的一个最小的例子 它似乎有效 但我不确定我是否做对了 template
  • 实现按住连续事件触发的优雅方式?

    我经常需要通过按住按钮来触发一系列事件 想一个 增加字段的按钮 点击它应该将其增加 1 但点击并按住应该每秒增加 1 直到释放按钮 另一个示例是在音频播放器类型应用程序中按住后退或前进按钮时的擦洗功能 我通常采用以下策略 On touchD
  • 如何将带有键值对的列表转换为字典

    我想迭代这个列表 name test1 email email protected cdn cgi l email protection role test description test name test2 email email p
  • 嵌入式 Derby/Java DB 中的自动增量错误

    我正在开发一个在嵌入式模式下使用 Apache Derby 数据库的会计程序 我有一个包含两列的表 Branch CREATE TABLE Branch idBranch INT NOT NULL PRIMARY KEY GENERATED
  • 如何在Android中截断TextView,然后添加省略号

    我读过这里的一些其他线程也有类似的担忧 但他们的答案似乎都不适合我 无法在 Android 上使用省略号 https stackoverflow com questions 1698881 cant get ellipsis to work
  • 如何创建 ASP.NET 网站的移动版本?

    我有一个使用asp创建的网站 我想让手机可以访问它 这样用户就可以通过他 她的手机使用它 我对 XML 或 NET 没有任何了解 我怎样才能做到这一点 ASP NET 移动网页 https learn microsoft com en us
  • 如何在 VSTS 部署期间从 Azure Web App 删除文件

    我有一个 Azure Web 应用程序 我将一些数据存储在它的持久存储中 通过我的 VSTS 发布定义 我想删除一个填充了数据的文件夹 该文件夹位于D home site MyFolder 有没有办法可以在部署期间以编程方式从 VSTS 发
  • 哪里有一些好的 Xlib 编程指南?

    我现在对 Xlib 编程有点困惑 几周前我开始使用 dwm 一个轻量级窗口管理器 我想找一些 Xlib 编程书籍或在线资源来自定义 dwm 然而 在网上搜索后 我没有看到太多关于 Xlib 的新文章 亚马逊上最新的X窗口系统编程指南是199
  • 我的spark sql限制非常慢

    我使用spark从elasticsearch中读取 Like select col from index limit 10 问题是索引非常大 它包含 1000 亿行 而 Spark 会生成数千个任务来完成这项工作 我只需要 10 行 即使
  • 将 pyqtgraph 导出到视频

    我想将 pyqtgraph 导出到视频 有什么简单的方法可以做到这一点吗 该图与此示例没有太大区别 只是它包含大约 10000 帧 from pyqtgraph Qt import QtGui QtCore import numpy as
  • poi 中的 IRR 返回 NaN 但 excel 中的值正确

    当我使用 apache poi 计算 Irr 值时 我得到 Double NaN 但 excel 中的相同输入我得到负值 那么为什么它们返回不同的值呢 inputs here irr 1 0601017230994111E8 19150 6
  • React-native 链接找不到我的 MainApplication.java 文件

    每次我尝试react native link一个新的库 我收到同样的错误消息 这是用于react native video的 rnpm install info Linking react native video android depe
  • 为什么在 google chrome 浏览器中尝试时,javaScript 中的“navigator.userAgent”会返回字符串“Mozilla”?

    我正在开发 javaScript 代码 我想确定客户端浏览器的版本和品牌 这是我用来执行此操作的代码段 var browserName function BrowserCheckin if navigator userAgent index
  • 如何在 C# 中为大型 HTTP 请求设置 HttpWebRequest.Timeout

    我不知道如何处理 HttpWebRequest Timeout 之前 我曾经为 Socket 对象设置超时 这很简单 超时设置发送或接收数据块的最长时间 然而 HttpWebRequest Timeout 似乎设置了整个 HTTP 请求的超
  • Bash Shell 脚本 - 检查标志并获取其值

    我正在尝试制作一个 shell 脚本 其设计如下运行 script sh t application 首先 在我的脚本中 我想检查脚本是否已使用 t 标志运行 例如 如果它在没有像这样的标志的情况下运行 我希望它出错 script sh 其
  • 使用左值引用作为非类型模板参数[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我读到以下类型允许作为非类型模板参数 整数类型 enum ptr 到对象 方法 对对象 方法的左值引用 std nullptr t 我不明白