问题标签 [generic-programming]

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 投票
5 回答
603 浏览

c# - .NET 通用列表问题,按设计工作,需要解决。增加价值而不是参考

我有一个List<T>并且我需要避免我将要概述的行为:

这会导致此 writeline 打印相同的值。

基本上我需要的是改变“添加”方法的行为。我想添加一个具有相同值的对象的新实例,而不仅仅是对同一对象的引用。我知道这将使用更多的内存。

0 投票
2 回答
4122 浏览

c# - C# 中的泛型方法

一般来说,通用方法对我来说是新的。需要一个返回泛型集合的方法,但也需要一个相同泛型类型的集合并接受

范围。整个以下函数的 T 应该是相同的类型,所以我现在使用的是(简化版):

但我收到错误:

错误:无法从用法中推断方法“System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumberable, System.Func)”的类型参数。尝试明确指定类型参数。

有没有办法做到这一点?

0 投票
1 回答
175 浏览

language-agnostic - 在正式软件设计中处理无定形子系统

像 Alexander Stepanov 和 Sean Parent 这样的人投票赞成采用正式和抽象的软件设计方法。
这个想法是将复杂系统分解为有向无环图,并在表示该行为的节点中隐藏循环行为。
Parent 在 boost-con 和 google 上做了演示(来自 boost-con 的表格,第 24 页介绍了这种方法,还有一段google talk 的视频)。

虽然我喜欢这种方法并认为它是一种必要的发展,但我在想象如何处理具有无定形行为的子系统时遇到了问题。
例如,想象一个状态机的通用模式:使用所有状态都支持的接口,并在状态的具体实现中具有不同的行为。

一个人将如何解决这个问题?
请注意,我只是在寻找一种抽象的方法。

我可以考虑将该行为隐藏在节点后面并为状态定义不同的子 DAG,但是如果您想从子 DAG 影响主 DAG 的行为,这会使设计变得相当复杂。

0 投票
3 回答
2783 浏览

c++ - 模板问题('typename' 不是模板函数参数)

实际上我在用英特尔编译器编译一些库时遇到了问题。

这个库已经用 g++ 正确编译。

问题是由模板引起的。我想了解的是 **typename**在函数体内声明 as not 模板函数参数和变量声明

例子:

编译这种代码会产生以下错误(intel),(gcc没有声明):我有以下错误

我想了解的是函数体内类型名的用法,参数声明。

前任。:

在不同的文件中我有:

0 投票
2 回答
7289 浏览

wpf - DataTemplate.DataType = 集合?

有没有办法创建一个处理项目列表的数据模板?

我有 Contact.Phones ( EntityCollection<Phone>) 并且我希望数据模板处理列表 - 添加删除编辑等。

有没有办法将 DataTemplate 的 DataType 属性设置为 generic EntityCollection<Phone>

0 投票
4 回答
1862 浏览

c# - 很好的泛型介绍

迫于优势,我正在寻找一种将泛型编程集成到我当前的编程风格中的方法。我想在 C# 中使用泛型,但在一些日常使用示例中找不到任何好的介绍材料。如果您有使用泛型的经验:您发现哪些资源对学习它们最有用?(书籍、文章等……)

0 投票
2 回答
723 浏览

c++ - 使用 STL 和一元函数适配函子检查列表成员资格

我试图编写一个简短的实用函子,它接受两个 std::pair 项目并测试它们的相等性,但忽略元素的顺序。此外(这是我遇到麻烦的地方)我编写了一个函数来获取这些 std::pair 项目的容器并测试容器中给定对参数的成员资格。

我想不出一种允许通用容器选择的干净方法,所以我现在将 std::vector 硬编码为容器类型。对使容器类型通用的帮助也将不胜感激,但现在我只想让上面的内容编译和工作。我得到的错误是:

按照建议通过添加“类型名称”来更改代码只会导致以下错误:

0 投票
1 回答
282 浏览

haskell - 在处理许多不相关的类型时避免样板

我正在编写处理来自Language.Exts.Annotated.Syntax的值的代码,其中定义了反映 Haskell 模块结构的各种类型:

我希望能够编写遍历这些数据结构并对它们执行各种转换的函数。因为没有一种通用的数据类型,所以我不能编写一个可以做所有事情的函数。

到目前为止,我已经编写了一个Tree包含这些类型的类型,以便我的转换函数可以执行以下操作Tree l -> Tree l

但是,我现在发现自己编写了很多代码,这些代码需要 a Module,包装它ModuleT,调用一个函数,然后将结果Module再次解包。我有:

两个问题:

  1. 鉴于我无法更改 Language.Exts.Annotated.Syntax 中的类型,我是不是走错了路?
  2. 如果没有,我可以以某种方式减少所有这些样板吗?
0 投票
2 回答
956 浏览

haskell - 模棱两可的类型变量

我之前关于遍历数据结构的问题相关,当我将代码与 uniplate 包一起使用时,我遇到了使代码通用的问题。我正在处理Language.Exts.Annotated.Syntax模块中的数据结构,它们都是具有类型参数的泛型l。这l在整个树中都是一样的。

我正在编写的代码是这样的:

此代码在最后两行都产生以下错误:

我可以理解为什么这段代码是模棱两可的:transformBi接受 a(to -> to)并将from其转换为from; l就我而言, inChild1 llin之间没有联系Parent l。我没有看到如何解决它。我尝试添加类似的类型约束transformBi (doInt :: Child1 l -> Child1 l),但我得到了同样的错误;l当我这样做时,就好像我正在引入一个新的。

如何告诉编译器我lreplace,transformBi doInt和使用相同的transformBi doString

编辑: 这是演示我在做什么的完整程序。在 GHC 6.10.4 下,该程序编译失败,出现上述错误。

0 投票
5 回答
9134 浏览

java - Java 泛型类和通配符

我在java中遇到了泛型类的问题。

我有这门课:

此类的实现可以是:

ConcreteItem 只是一个扩展 AbstractItem (抽象的)的简单类。

所以 MyChildClass 有一个 ConcreteItem ,我可以使用:

好的,目前一切都很好。这是问题所在:

现在我想从集合中提取 MyMotherClass 的一个实例并设置它的项目(类型未知):

如果我这样做,它就会运行。但我有警告,因为 MyMotherClass 是泛型类型,我不使用泛型类型。但我不知道我提取的孩子是哪种类型,所以我想使用通配符:

这就是问题所在:我有一个编译错误,上面写着:MyMotherClass 类型中的方法 setItem(capture#1-of ?) 不适用于参数(AbstractItem)

当我尝试使用继承的通配符时,同样的问题:

我能做些什么 ?

感谢并为我不太流利的英语感到抱歉;)