避免繁琐的可选参数

2024-01-28

如果我有一个带有 2 个必需参数和 4 个可选参数的构造函数,那么如果我使用默认参数(我不喜欢它,因为它很差),我如何避免编写 16 个构造函数,甚至是 10 个左右的构造函数自我文档)?是否有任何使用模板的惯用语或方法可以用来使其不那么乏味? (并且更容易维护?)


您可能感兴趣命名参数惯用语 https://isocpp.org/wiki/faq/ctors#named-parameter-idiom.

总而言之,创建一个类来保存要传递给构造函数的值。添加一个方法来设置每个值,并让每个方法执行return *this;在最后。在你的类中有一个构造函数,它接受这个新类的常量引用。可以像这样使用:

class Person;

class PersonOptions
{
  friend class Person;
  string name_;
  int age_;
  char gender_;

public:
   PersonOptions() :
     age_(0),
     gender_('U')
   {}

   PersonOptions& name(const string& n) { name_ = n; return *this; }
   PersonOptions& age(int a) { age_ = a; return *this; }
   PersonOptions& gender(char g) { gender_ = g; return *this; }
};

class Person
{
  string name_;
  int age_;
  char gender_;

public:
   Person(const PersonOptions& opts) :
     name_(opts.name_),
     age_(opts.age_),
     gender_(opts.gender_)
   {}
};
Person p = PersonOptions().name("George").age(57).gender('M');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

避免繁琐的可选参数 的相关文章

  • 在 Vulkan 中,图形队列系列与当前队列系列分离是否有益?

    据我所知 队列系列可能支持呈现到屏幕但不支持图形 假设我有一个同时支持图形和呈现的队列系列 以及另一个仅支持呈现的队列系列 我应该为两个进程使用第一个队列系列 还是应该将第一个队列系列委托给图形 将后者委托给呈现 或者这两种方法之间没有明显
  • 如何从字符串中提取子字符串直到遇到第二个空格?

    我有一个像这样的字符串 o1 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 如何仅提取 o1 1232 5467 要提取的字符数并不总是相同 因此 我只想提取直到遇到
  • C# SmtpClient编程中如何设置带有中文的附件文件名?

    我的代码如下 ContentType ct new ContentType ct MediaType MediaTypeNames Application Octet ct Name 这是一个很长的中文文件名希望能用它在附件名中 Doc A
  • 格式说明符%02x

    我有一个简单的程序 include
  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 以编程方式创建 Blob 存储容器

    我有一个要求 即在创建公司时 在我的 storageaccount 中创建关联的 blob 存储容器 并将容器名称设置为传入的字符串变量 我已尝试以下操作 public void AddCompanyStorage string subDo
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • jQuery/JavaScript - 拥有大量小 .js 文件时的性能问题?

    我有一个包含大量引用的 js 文件的网站 这些是相当小的文件 但我想将我的方法按主题 功能分开 将所有方法保存在一个 js 文件中是否更好 或者拥有许多 20 30 个小文件都只包含一些行没有问题 无论如何 将它们分开进行开发 但您应该考虑
  • ios 11 自定义导航栏位于状态栏下方

    刚刚下载了 xcode 9 我遇到了这个奇怪的问题 在 ios 11 上 我的自定义导航栏似乎只有一半大小 位于状态栏下方 在 ios 10 上工作正常 所以这是我的代码 let newNavbar UINavigationBar UINa
  • 启用 AOP 会破坏我对带有字符串的工厂 bean 的依赖注入

    启用 AOP 会破坏我对带有字符串的工厂 bean 的依赖注入 这是上下文文件中的片段
  • R类型转换表达式()函数()

    我一直在尝试用 R 编写一个程序来实现牛顿法 我基本上是成功的 但有两个小障碍一直困扰着我 这是我的代码 Newton lt function f f guess f lt readline prompt Function f lt rea
  • time() 是好盐吗?

    我正在查看一些我自己没有编写的代码 该代码尝试使用 SHA512 对密码进行哈希处理 并仅使用time 作为盐 是time 盐太简单了还是这个代码安全 感谢您的回答和评论 我在这里为新读者总结一下 每个用户的盐应该不同 因此如果2个用户同时
  • 如何计算两个 AnchorEntities 之间的距离?

    有一个位置是SIMD3 还有 AnchorEntity 我想拉开两人之间的距离 我是怎么做到的 var distance distance position self modelentity position relativeTo nil
  • GUID 的不可猜测性如何?

    不久前 我开发了一个网络应用程序 用户可以在其中购买门票 由于我们客户流程的工作方式 您在购买后实际上得到的是一个包含票号的 URL 这些是在中东购买房产的门票 每张门票的潜在价值约为 3 000 000 美元 显然 给出连续整数是一个坏主
  • 如何在开发过程中禁用 Crashlytics

    有没有简单的方法可以在开发时关闭 Crashlytics Android SDK 我不希望每次我做蠢事时它都会发生崩溃 另一方面我不想发表评论Crashlytics start 并且可能有忘记取消注释并提交的风险 我从 Crashlytic
  • 如何向 Django MPTT 模型添加额外数据以在模板中显示?

    这个问题与this one https stackoverflow com questions 19762288 how to add extra data to a django model for display in template
  • 带有重音字符的 SQLite 排序列

    我正在开发一个网站 使用SQLite使用 PHP 的数据库 我在跑Windows 开发 和我的生产环境应该是 nix平台 这是我的表的架构 CREATE TABLE animals id INTEGER NOT NULL UNIQUE na
  • 如何使网站的第一部分首先加载? (就像 Google PageSpeed 一样)

    我有一个非常大的网站 加载需要很长时间 大约需要 120 秒 我想做的是加载网站的第一半加载第一 然后用户可以在加载其他部分的同时进行冲浪 我正在尝试做的事情如下 首先这可能吗 据我所知是的 因为 Google PageSpeed 就是这样
  • 如何向网络服务器发出我正在发布 gzip 压缩数据的信号?

    我有一个客户端将把大型 JSON 文件发布到 API 服务器 由于文件是如此可压缩 我想对它们进行 gzip 并发送压缩数据 我想知道的是 向服务器表明我的意图的最佳方式是什么 基本上 我想要相反的Accept encoding 这样服务器
  • 通过 ArrayList 进行反向迭代会出现 IndexOutOfBoundsException

    当我反向迭代 ArrayList 时 我收到 IndexOutOfBoundsException 我尝试进行前向迭代 没有问题 我期望并知道列表中有五个元素 代码如下 Collection rtns absRtnMap values Lis
  • 在 SVG 路径内嵌套文本

    是否可以嵌套文本 例如text元素 在 SVG 内path元素 我这样问是因为我希望将鼠标悬停在路径上时显示一个文本气球 如下所示 path mypath hover text display block 我想避免使用 JavaScript
  • Java BigDecimal精度问题

    我知道以下行为是一个老问题 但我仍然不明白 System out println 0 1 0 1 0 1 或者即使我使用BigDecimal System out println new BigDecimal 0 1 doubleValue
  • 使用多上下文应用程序自定义 ASPNET Identity 一对多关系

    基本上 我希望有一个可以创建自己故事的用户 我有这些课程 public class ApplicationUser IdentityUser public string DisplayedName get set public class
  • 如何使用 JavaScript/jQuery 编辑 PHP 变量?

    我想更新 PHP 变量 LinkOpen基于复选框元素的当前状态 avflipswitch 基于 avflipswitch复选框状态 我想切换 PHP 变量的值 LinkOpen之间 blank and self 所以我可以把这个值推到我的
  • 在单元测试中获取命令行参数

    在 Visual Studio 2008 Pro 的测试项目中 我创建了一个测试项目 并且我想配置项目属性以向测试提供命令行参数 我设置了属性 但后来意识到我不知道如何实际使用该参数 如何从 MSTest 获取参数 据我所知 VS 2008
  • Django - 如何覆盖模型上的过滤器?

    我很好奇是否有最佳实践或推荐方法来实现此目的 假设我有一个这样的模型 class Cat models Model field1 models CharField field2 models CharField evil models Bo
  • 避免繁琐的可选参数

    如果我有一个带有 2 个必需参数和 4 个可选参数的构造函数 那么如果我使用默认参数 我不喜欢它 因为它很差 我如何避免编写 16 个构造函数 甚至是 10 个左右的构造函数自我文档 是否有任何使用模板的惯用语或方法可以用来使其不那么乏味