问题标签 [named-constructor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
839 浏览

c++ - 命名构造函数习语和继承

我有一些带有一些命名构造函数的类。当我从它们继承时,我应该如何继承构造函数?问题是它们返回基类的对象而不是子类的对象。

附带问题:我可以使用 C++0x“使用”来减少样板代码的数量吗?

0 投票
1 回答
864 浏览

c++ - 使用 istream 作为参数的命名构造函数的问题

我正在尝试为我的类 Matrix 创建一个命名构造函数,输入作为流,我可以从中读取初始化值。

该方法应该或多或少像这样实现

但是,在编译时,我在方法的声明中遇到错误(第 74 行是定义原型的地方,第 107 行是开始实现的地方)

但是,在使用简单参数(如 int)定义和实现命名构造函数时,我不会遇到这些错误。

我错过了什么?任何帮助将不胜感激。

0 投票
2 回答
579 浏览

scala - Scala中的命名构造函数?

Scala中有命名构造函数吗?

0 投票
5 回答
1427 浏览

c++ - 向类的构造函数添加虚拟参数以解决调用歧义是否违反任何规则?

采用以下类和两个对象定义:

之前的两个构造函数具有虚拟枚举参数,以解决在这些虚拟参数不存在的情况下导致的调用歧义。现在尽管有可能在这里使用命名构造函数,但如果我坚持使用这些虚拟参数,这是否违反了我应该注意的任何编码规则?

0 投票
2 回答
466 浏览

c++ - 模板、接口(多重继承)和静态函数(命名构造函数)

设置

我有一个图形库,我试图在其中尽可能多地分解事物,我发现的最简洁的描述方式如下:有一个node仅实现边列表的 vanilla 类型:

然后,我希望能够为整个组合添加接口,如下所示:

等等。然后,实际的图形类进来了,它以实际的节点类型为模板:

不同之处在于它命名了构造一些特殊图形的构造函数,比如笛卡尔格。在这种情况下,我希望能够在图中添加一些额外的信息,具体取决于node_T.

实现这一目标的最佳方法是什么?

可能的解决方案

我想到了以下不起眼的解决方案,通过dynamic_cast<>

这将在node_T以下情况下运行:

问题

从哲学上讲,这是正确的方法吗?我知道人们不喜欢多重继承,尽管像这样的“接口”应该没问题。

不幸的是,这存在一些问题。至少据我所知,dynamic_cast<>涉及相当多的运行时开销。因此,我遇到了我之前解决的问题:编写需要权重的图形算法,而与实际node_T类是否具有权重无关。这种“接口”方法的解决方案是编写一个函数:

但它的问题是它使用运行时信息(dynamic_cast)工作,但原则上我想在编译时决定它,从而使代码更有效率。

如果有一种不同的解决方案可以解决这两个问题,尤其是比我拥有的更清洁、更好的解决方案,我很想听听!

0 投票
3 回答
145 浏览

c++ - 命名构造函数和临时生命周期延长

我正在寻找一种定义“基础”构造函数的方法,它将使用默认值初始化值,然后将该基础扩展到许多专门的构造函数。

我想要的伪代码可能如下所示:

起初,我考虑延长临时的生命周期f,但 const 声明阻止我编辑它的成员。所以这似乎已经结束了。

然后我尝试了“命名构造函数”方法(如上所示)。但是,我必须先修改示例以创建对象,然后修改它,然后返回它。这似乎可行,但我有理由相信这只是巧合,因为它f是暂时的,并且在函数结束时超出了范围。

我也考虑过使用auto_ptrs 之类的东西,但是我同时使用 Foo 对象以及auto_ptrs 到 Foo,这使得其余代码“关心”对象是否是通过基本构造函数创建的(在这种情况下它将是一个对象)或通过扩展构造函数之一(在这种情况下它将是一个指针)。

如果它有帮助,在 Python 中,我会使用这样的东西:

最后,我想这样做有两个原因:

  1. 代码重用,我想将公共初始化从每个构造函数中移出并移入一个。我意识到我可以init()通过每个构造函数调用的 -type 私有方法来做到这一点,但我只想提一下。
  2. 清晰并解决歧义。与命名构造函数示例的动机非常相似,参数类型本身不足以确定应该使用哪个 ctor。此外,fromSomething语法提供了极好的清晰度。

如果有一个简单的解决方案,请原谅我,过去几年我的工作已经从 c++ 转移到 Java/Python,所以我有点生疏了。

0 投票
1 回答
92 浏览

python - 在工厂方法中返回什么?

我有一个类Node,我希望它有多个构造函数。

我在网上阅读有关工厂方法的信息,显然,这是实现构造函数的最简洁的 Pythonic 方式。到目前为止,我的课程如下所示:

我应该回到这里做什么?我在网上看到的所有例子都只有一个作业,他们会返回那个作业。我有三个任务。什么适合返回这里?

0 投票
1 回答
2685 浏览

python - python - 使用命名列(和数据类型)初始化一个空数组

我有三个约束,而且,像往常一样,我只能弄清楚如何同时满足其中任何两个:

  1. 多维数组
  2. 命名列
  3. 不同的列包含不同的数据类型(因此 col 1 中的所有内容都是字符串,但 col 2 都是 Decimal 等)

我目前正在使用 numpy ndarrays 在每列中存储不同类型的数据。我已经初始化了数组,以便它可以存储多种数据类型:

我一直在使用标题(字符串名称列表)作为列名的代理(然后在标题中查找值的索引),但这看起来很笨拙。

我环顾四周,但据我所知,当您使用列名(和类型)初始化数组时,您必须在这样做时用值填充数组,如:Store NumPy Row and Column Headers

因为当我尝试这样的事情时:

我收到此错误:

0 投票
1 回答
239 浏览

php - 在命名构造函数中创建文件

我有一个通过命名构造函数创建文件的类,但是当我使用 phpspec 对其进行测试时,它不会创建文件。

我找不到原因,所以我想重新审视我的代码可能会有所帮助。

这是我的文件类:

这是我的规格:

0 投票
1 回答
366 浏览

php - 具有继承和类型提示的静态工厂模式

我正在尝试创建一个Developer作为Person.
我希望他们都使用静态工厂模式(或“命名构造函数”)。

我见过这种模式的一些例子,但没有一个使用继承。

问题 1
在示例中,他们使构造函数方法始终为私有。
是否可以对其进行保护以便从子构造函数中调用?
或者我应该解决使构造函数始终私有的问题,并尝试构建create从子create方法调用父方法的继承?

问题 2
当我尝试实例化 Person 或 Developer 类时,我收到以下错误。为什么?

当我删除这: self两种方法中的类型提示时它会起作用create,但我不明白为什么它们不兼容,如果DeveloperPerson.

提前致谢。