自动创建构造函数,基于父类的构造函数(C++)

2023-12-31

这是我想要开始工作的代码:

template <class A>
class B : public A {
public:
  // for a given constructor in A, create constructor with identical parameters,
  // call constructor of parent class and do some more stuff
  B(...) : A(...) {
    // do some more stuff
  }
};

是否有可能实现上面示例描述的行为?


不,目前在 C++ 中这是不可能的。这被称为“完美转发”,并且在 C++0x 中是允许的。您可以通过为构造函数生成最多固定最大值(例如 8 个参数)的重载来模拟它,无论是 const 引用还是非常量引用。这仍然不完美(临时对象不会作为临时对象转发),但在实践中通常有效:

template<typename T1>
B(T1 &a1):A(a1) { 
  // do some more stuff
}

template<typename T1>
B(T1 const &a1):A(a1) { 
  // do some more stuff
}

template<typename T1, typename T2>
B(T1 &a1, T2 &a2):A(a1, a2) { 
  // do some more stuff
}

template<typename T1, typename T2>
B(T1 const &a1, T2 const &a2):A(a1, a2) { 
  // do some more stuff
}

template<typename T1, typename T2>
B(T1 const &a1, T2 &a2):A(a1, a2) { 
  // do some more stuff
}

template<typename T1, typename T2>
B(T1 &a1, T2 const &a2):A(a1, a2) { 
  // do some more stuff
}

// ...

可以使用 Boost.Preprocessor 或某些脚本自动生成,但这并不完全好,因为重载量增长很快。

简而言之 - 在 C++0x 可用之前不要自己编写构造函数,它支持both任何函数的完美转发,以及特殊的构造函数转发("using A::A;").

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

自动创建构造函数,基于父类的构造函数(C++) 的相关文章

  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • asp.net 文本框文本模式数字,仅允许数字

    我只是想知道 ASP NET 中是否有一种方法只允许文本框中的数字textmode number 当我使用这个时
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • C# 中条件编译符号的编译时检查(参见示例)?

    在 C C 中你可以这样做 define IN USE 1 define NOT IN USE 1 define USING system 1 system 1 IN USE 进而 define MY SYSTEM IN USE if US
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 使用 CSharpCodeProvider 类编译 C# 7.3 的 C# 编译器版本是什么?

    我想使用 Microsoft CSharp CSharpCodeProvider 类来编译 C 7 3 代码 编译器版本在 IDictionary 中指定 在创建新的 CSharpCodeProvider 时将其作为输入 例如 Compil
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我

随机推荐

  • Android VideoView 不播放连续视频

    我想连续播放 2 个视频 第一个视频总是播放得很好 完成后 您可以在日志中看到它设置了新的视频 URL 但随后 SurfaceView 抛出错误 并且 VideoView 只是冻结在第一个视频的最后一帧 没有其他事情发生 有什么想法吗 谢谢
  • less.css 跨文件共享变量

    我正在使用 less css 来简化我的 css 样式 我想在一个 less 文件中声明一个变量 并在我的许多 less 文件中共享它的用法 这可能吗 例如 无英语 languageFloat 左 无图表 div footer a web
  • Bootstrap 4 响应式导航栏在 xs 宽度处折叠?

    我试图找到一个 Bootstrap 4 响应式导航栏的示例 该导航栏仅在 xs 宽度处折叠为汉堡包按钮 但在更宽时完全可见 有一个引导程序3example http getbootstrap com components navbar这确实
  • 平移/缩放用户控件的最佳实践?

    我们当前有一个用户控件 它显示其他用户控件的动态矩阵 由于它是动态的 视图可能会变大 需要用户在浏览器中向上 向下和向左 向右滚动才能查看所有内容 我想为用户提供用户控件的一种视图 并且能够平移和缩放它 就像感觉一样this http de
  • Qt 中的样式表、隐藏的小部件和大小

    样式表有一个大问题 如果您通过将最大值和最小值设置为相同 固定大小 或其他方式通过样式表设置大小 然后尝试使用小部件上的 size 来获取它们 如果小部件从未显示过 那么您得到的尺寸就会很奇怪 但你也无法从样式表中获取它们 所以你必须显示之
  • CodeMirror 简单模式 - 正则表达式未按预期突出显示

    我正在尝试使用CodeMirror简单模式 http codemirror net demo simplemode html创建我自己的编辑器并突出显示一些自定义关键字 但是 它会突出显示这些单词在其他单词中的出现 这是我定义编辑器模式的代
  • 什么时候适合使用基数排序?

    能够使用基数排序的数据有哪些限制 如果我要对一个大的整数列表进行排序 使用基数排序是否合适 为什么基数排序不被更多地使用 当您拥有大量数据且其键受到某种限制时 这非常有用 例如 当您需要排序 100 万个 64 位数字的数组时 可以使用它按
  • 全速线程上的 SwingUtilities.invokeLater

    我有一个线程使用 SwingUtilities invokeLater 在我的 JFrame 上显示更新 线程的速度是可调的 当它设置为全速 更新之间没有睡眠 时 我的程序会严重减慢 我想问题是我的线程生成了太多 JFrame 线程无法使用
  • 如何做条件Gson反序列化默认值

    想象一下如果我有以下 JSON game football people elevent game badminton people two 我的班级如下 class Sport String game String people 我可以对
  • 如何为容器分配特定的 IP 并使其可以在 VM 主机外部访问?

    我希望让我的两个容器在 VM 主机之外的单独的特定 IP 地址上可用 192 168 0 222 192 168 0 227 没有端口映射 这意味着我希望使用容器的 IP 直接访问容器上的任何端口 我已经有一些计算机在 VM 主机外部的网络
  • 如何创建 UIBezierPath 渐变填充?

    我想创建一个UIBezierPath具有 10px 圆角和渐变填充 我怎样才能达到这个效果 这是我想做的事情的图片 正如你所看到的 这个正方形有 2px黑色边框 10px 圆角 红到绿线性渐变填充 我怎样才能以编程方式做到这一点不使用图案图
  • R Shiny 中有全局变量吗?

    如何使用 R Shiny 声明全局变量 以便不需要多次运行相同的代码片段 作为一个非常简单的示例 我有 2 个使用相同精确数据的图 但我只想计算一次数据 这里是ui R file library shiny Define UI for ap
  • 如何使用 {{{}}} 语法来获取受信任的 html?

    车把的 expression 表单 HTML 转义返回的值 expression 形式没有 有什么办法可以将这个功能添加到AngualarJS模板中 以便我们可以使用 expression 用于定期清理输出和 expression 对于可信
  • 如何使用 Thin 服务器而不是默认的 Webrick 运行 Cucumber Selenium?

    我的 Cucumber 功能与 selenium 一起使用默认的 Webrick 服务器运行 对于 Rails 3 应用程序 如何强制或设置使用瘦服务器而不是 Webrick 运行 要在 env rb 文件中添加任何设置吗 这是用最近的水豚
  • 如何避免 .flatMap(x->reactiveAction(x).thenReturn(x))

    在使用项目反应器库进行 Java 反应式编程期间 我偶然发现了一种模式 我想知道是否有开箱即用的支持 所以我想要下面的代码 Mono just hello flatMap hello gt reactiveAction hello then
  • 如何将提交移至另一个分支?

    我想将我的最后几次提交从 master 移到他们自己的分支中 我的电脑上的树看起来像这样 W some branch X1 X2 X3 X4 Y Z1 Z2 master 我希望它看起来像 W some branch X1 X2 X3 X4
  • Android通过代码截图

    这应该不是一个太难的问题 我希望能够截取我的布局 视图 的屏幕截图并通过短信发送 有人可以带我走完台阶吗 Thanks 编辑 我猜它不一定是 屏幕截图 只要我们能够以某种方式从视图中获取所有渲染的像素即可 在网络上 我发现了一些可以一起工作
  • fix.by(by.x, x) 中的错误:“by”必须指定唯一有效的列mergedata <- merge (dataset1, dataset2, by.x="personalid") [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 编辑问题以包括期望的行为 特定问题或错误以及重现问题所需的最短代码 help minimal reproducible example 这
  • Rails Date 与 Date.today 的比较

    我有一个日期格式的birth date变量 我想将它与 Date today 进行比较 如下所示 问题是它返回错误 因为它也想比较年份 这是一个生日 所以我不关心年份 只是想看看birth date 月份和日期 是否等于 Date toda
  • 自动创建构造函数,基于父类的构造函数(C++)

    这是我想要开始工作的代码 template