使用CRTP时如何避免错误?

2024-03-23

Using CRTP http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern有时我会写这样的代码:

// this was written first
struct Foo : Base<Foo, ...>
{
   ...
};

// this was copy-pasted from Foo some days later
struct Bar : Base<Foo, ...>
{
   ...
};

很难理解出了什么问题,直到我在调试器中跟踪代码并发现 Bar 的成员没有在Base.

如何在编译时显示此错误?

(我使用MSVC2010,所以我可以使用一些C++0x功能和MSVC语言扩展)


在 C++0x 中,您有一个简单的解决方案。我不知道它是否在MSVC10中实现。

template <typename T>
struct base
{
private:
    ~base() {}
    friend T;
};

// Doesn't compile (base class destructor is private)
struct foo : base<bar> { ... };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用CRTP时如何避免错误? 的相关文章

  • 使用 ## 和 __LINE__ 创建 C 宏(与定位宏的标记串联)

    我想创建一个 C 宏来创建一个基于名称的函数 在行号上 我想我可以做类似的事情 真正的函数在大括号内有语句 define UNIQUE static void Unique LINE void 我希望能扩展到类似的内容 static voi
  • 在 JavaScript 中引用 C# 变量

    我已经阅读了很多线程 但我不明白为什么这不起作用 我正在创建一个将用作导航栏的 SharePoint Web 部件 一切都很顺利 直到我尝试在 JS 代码中引用 C 变量 这是来自 VisualWebPart1UserControl asc
  • 访问特征矩阵的行向量时复制或引用

    我正在使用的代码Eigen http eigen tuxfamily org index php title Main Page矩阵库 我注意到在整个代码中 有如下访问器 RowVector3f V size t vertex index
  • 函数“sum”的隐式声明在 C99 中无效

    我一直在寻找解决方案 但没有找到任何有帮助的东西 我收到以下错误 Implicit declaration of function sum is invalid in C99 Implicit declaration of function
  • ASP.NET 如何在 Web API 中读取多部分表单数据?

    我将多部分表单数据发送到我的 Web API 如下所示 string example my string HttpContent stringContent new StringContent example HttpContent fil
  • 基于多线程的 RabbitMQ 消费者

    我们有一个 Windows 服务 它监听单个 RabbitMQ 队列并处理消息 我们希望扩展相同的 Windows 服务 以便它可以监听 RabbitMQ 的多个队列并处理消息 不确定使用多线程是否可以实现这一点 因为每个线程都必须侦听 阻
  • 为基于架构的 XML 文件创建 WPF 编辑器

    这是场景 我们的服务器产品之一使用大型 XML 配置文件 该文件的布局相当好 并且针对 XSD 文件进行了验证 现在是时候构建一个配置 GUI 来维护这个文件了 我想深入研究 WPF 来完成它 我可以为每个配置部分布置一个单独的表单 每次向
  • C# 中输入按键

    我尝试了这段代码 private void textBox1 KeyPress object sender KeyPressEventArgs e if Convert ToInt32 e KeyChar 13 MessageBox Sho
  • 如何从命名空间内重载运算符<<

    这是我能想到的最小的包含示例 首先是类的标题 每当使用 pragma once ifndef EURO H define EURO H include
  • C# 中不区分大小写的替换不使用正则表达式?

    有没有一种方法可以在不使用 C 中的正则表达式的情况下对字符串进行不区分大小写的替换 像这样的东西 string x Hello x x Replace hello hello world 你可以尝试类似的东西 string str Hel
  • 如何使用 Selenium Webdriver .NET 绑定设置 Chrome 首选项?

    这是我正在使用的 用户代理可以成功设置 而下载首选项则不能 Windows 7 Chrome 26 Selenium dotnet 2 31 2 chromedriver win 26 0 1383 0 ChromeOptions chro
  • 我如何模拟 UserManager 和 RoleManager 进行单元测试

    我模拟了抽象类来测试类的具体方法 如下所示 var mock new Mock
  • 哪个更快?按引用传递与按值传递 C++

    我认为按引用传递应该比按值传递更快 因为计算机不复制数据 它只是指向数据的地址 但是 请考虑以下 C 代码 include
  • Bazel:将编译标志添加到默认 C++ 工具链

    我想向默认的 C 工具链添加一些编译器和链接器标志 以便我构建的所有目标 本地或导入 共享它们 我知道可以定义我自己的工具链 但我不想这样做 因为它非常复杂且容易出错 理想情况下我想要这样的东西 cc toolchain cc defaul
  • 多个包含带有变量定义的头文件

    我只是构建一个简单的 C 项目 代码如下所示 head h ifndef HEAD H define HEAD H int my var 100 endif src1 cpp include head h src2 cpp include
  • 为什么将未使用的返回值转换为 void?

    int fn void whatever void fn 是否有任何理由将未使用的返回值强制转换为 void 或者我认为这完全是浪费时间 David s answer https stackoverflow com questions 68
  • 为什么 getch 不可移植?

    是什么使得 getch 本质上无法作为标准 C 函数包含在内 对于控制台界面来说 它是如此直观和优雅 如果没有它 要求输入单个字符总是会产生误导 因为用户可以输入多个键 更糟糕的是 您经常需要确保在读取控制台输入后清除标准输入 这甚至不是作
  • 曲线/路径骨架二值图像处理

    我正在尝试开发一个可以处理图像骨架的路径 曲线的代码 我想要一个来自两点之间骨架的点向量 该代码在添加一些点后结束 我没有找到解决方案 include opencv2 highgui highgui hpp include opencv2
  • Cordova 上的 ClearCookiesAsync()

    我正在尝试使用 wp8 cordova 中的插件来清除 WebBrowser cookie 我已经让它与 JavaScript 进行通信 并且我的 c 文件中有类似这样的内容 using WPCordovaClassLib Cordova
  • 在地图上使用 find

    如何使用 find 和 aconst iterator如果你有一个地图定义为 typedef std pair

随机推荐

  • 是否有一个包含所有 Bootstrap 元素的巨大“资产页面”,我可以重新设置样式? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 http twitter github com bootstrap base css html htt
  • 在android的子目录中创建文件

    是否可以使用android中的openFileOutput方法在 data data packagename files 目录下创建的子目录中创建文件 即 data data packagename files 目录中有一个名为 text
  • Kohana——命令行

    我正在尝试在我的 Web 应用程序中 假分叉 一个进程 通过 SMTP 发送电子邮件 并且该应用程序是基于 Kohana 构建的 command test email exec php index php command gt dev nu
  • django-orm 不区分大小写的顺序

    我知道 我可以从 DJango ORM 运行不区分大小写的搜索 喜欢 User objects filter first name contains jake User objects filter first name contains
  • Android Compose 设置视图高度(以像素为单位而不是 dp)

    我想以像素而不是 dp 为单位设置视图高度 Box modifier Modifier height 100 dp 在此示例中 框的高度设置为 100 dp 并且修改器函数仅接受 dp 如何设置 Box 的高度 以像素为单位 Kilian
  • 在 Swift 中链接多个异步函数

    我正在尝试编写一系列函数 在要求用户确认某些内容之前验证用户的信息 想象一个购物应用程序 我首先必须检查用户是否添加了卡 然后我必须检查他们是否有足够的余额 然后我可以要求他们确认付款 我可以编写异步方法来检查卡 例如 func check
  • 使用 Javascript 生成高质量 PDF (jspdf+html2canvas)

    我一直在尝试通过单击页面上的按钮从 HTML 页面转换并生成 PDF 该按钮会使用两个流行的插件自动生成并强制下载页面的 PDF JSPDF HTML2Canvas 到目前为止 一切正常 但生成的 PDF 总是模糊且质量不高 导入 js 文
  • 这些 switch 语句有哪些替代方案?

    刚刚制作了这个极其简单的 GPA 计算器 想知道如何使用循环来避免大量的 switch 语句 我对 Java 很陌生 只是寻求一些建议 非常感谢任何其他改进程序的方法 预先感谢各位 package helloPackage import j
  • 出于好奇,学习Android开发

    最近我一直在考虑开发一些基本的android应用程序 这只是出于个人兴趣 请指导我从哪里开始 我需要什么工具以及指向某些 pdf 等的任何指示 我的背景 1 C语言嵌入式软件开发人员 2 有一些从事 Flex 工作的机会 因此熟悉eclip
  • RXJS 处理两个不同的事件,其中第一个事件必须取消第二个事件

    rxjs 对我来说非常具有挑战性 我发现自己一直在尝试解决这个问题 我在堆栈上找到的最接近的解决方案是使用合并运算符 这里是link https stackoverflow com questions 45495188 rxjs frome
  • 在后台运行时查看随机 ngrok URL

    当我启动 ngrok 客户端时 ngrok tcp 22它在前台运行 我可以看到随机生成的转发URL 例如tcp 0 tcp ngrok io 12345 gt localhost 22 如果我在后台运行 ngrok tcp 我找不到任何方
  • 如何从 PHP 调用 dup2() 系统调用?

    有一个eio dup2 http php net manual en function eio dup2 php函数来自Eio PECL 扩展 http php net manual en intro eio php但我对所有异步和事件循环
  • WinForms 表单冻结

    在表单 F1 上我有一个按钮 如果我创建另一个表单 我们称之为F2 并显示它没有问题 但我想做这样的事情 我的应用程序中的某些线程正在运行连接并侦听来自服务器的消息 当消息到达时 我的主窗体被注册以获取运行函数的事件 从该函数中 我尝试创建
  • 如何列出命名空间的功能?

    我想知道如何列出 Clojure 命名空间的所有函数 我已经做了一些研究 但还没有做到这一点 我已经了解了如何使用 show 方法列出 Java 类的方法 show java awt Graphics 为了列出 Clojure 命名空间的功
  • Python:concurrent.futures 如何使其可取消?

    Python concurrent futures 和 ProcessPoolExecutor 提供了一个简洁的接口来调度和监视任务 期货甚至provide https docs python org 3 library concurren
  • Angular 4 验证器可同时检查 2 个控件

    我有一个带有 2 个控件 port start 和 port end 的反应式表单 它们具有以下要求 两者都必须有一个值 它们的值必须介于 0 到 65535 之间 port start 值必须小于 port end 值 这是我到目前为止所
  • 在 SimpleXML 中美化/格式化输出

    我有一个 simplexml 脚本 用于发布从表单输入的数据 xml simplexml load file links xml sxe new SimpleXMLElement xml gt asXML person sxe gt add
  • 无法使用SED快速编辑文件

    该文件最初是 cat so app yaml application SO 我运行以下命令 我得到一个空文件 sed s SO so so app yaml gt so app yaml cat so app yaml 如何使用 SED 编
  • Silverlight Windows Phone 7:从 URL 加载图像

    我得到下面的代码 它试图将网络上的图像加载到图像控件中 当我运行它时 我在给定的行上收到错误 不允许网络访问 private void button1 Click object sender RoutedEventArgs e WebCli
  • 使用CRTP时如何避免错误?

    Using CRTP http en wikipedia org wiki Curiously recurring template pattern有时我会写这样的代码 this was written first struct Foo B