问题标签 [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 投票
12 回答
3661 浏览

c++ - 您在哪里找到有用的模板?

在我的工作场所,我们倾向于使用 iostreamstringvectormap和一两种奇数算法。实际上,我们还没有发现很多情况下模板技术是解决问题的最佳方案。

我在这里寻找的是想法和可选的示例代码,这些代码展示了您如何使用模板技术为您在现实生活中遇到的问题创建新的解决方案。

作为贿赂,期待您的回答获得赞成票。

0 投票
5 回答
9690 浏览

haskell - 你如何在 Haskell 中进行泛型编程?

来自 C++,我发现泛型编程必不可少。我想知道人们如何在 Haskell 中处理这个问题?

说一下如何在 Haskell 中编写通用交换函数?

Haskell中是否有等效的部分专业化概念?

在 C++ 中,我可以将通用交换函数部分专门化为通用 map/hash_map 容器的特殊函数,该容器具有 O(1) 容器交换的特殊交换方法。你是如何在 Haskell 中做到这一点的,或者 Haskell 中泛型编程的典型例子是什么?

0 投票
9 回答
8535 浏览

c - 纯 C 中的“多用途”链表实现

这不完全是一个技术问题,因为我知道 C 足以做我需要做的事情(我的意思是,就不要'让语言妨碍你'而言),所以这个问题基本上是一个'什么方向采取'的问题。

情况是:我目前正在学习高级算法课程,为了“成长为程序员”,我被要求使用纯 C 来实现实际作业(效果很好:几乎你犯的任何小错误实际上都会强制你要完全理解你在做什么来修复它)。在实现过程中,我显然遇到了必须从头开始实现“基本”数据结构的问题:实际上不仅是链表,还有堆栈、树等。

我专注于本主题中的列表,因为它通常是我最终在程序中使用很多的结构,作为“主”结构或作为其他更大结构的“辅助”结构(例如,解析的哈希树使用链表产生冲突)。

这要求列表存储许多不同类型的元素。我在这里假设我不想为每种类型重新编码列表。所以,我可以想出这些替代方案:

  • 制作一个 void 指针列表(有点不优雅;更难调试)
  • 只制作一个列表,但有一个联合作为“元素类型”,包含我将在程序中使用的所有元素类型(更易于调试;如果元素大小不同,则会浪费空间)
  • 使用预处理器宏以SGLIB的样式为每种类型重新生成代码,“模仿”C++ 的 STL(创造性的解决方案;不浪费空间;元素在返回时具有它们实际的显式类型;列表中的任何更改代码真的很戏剧化
  • 你的想法/解决方案

把问题说清楚:以上哪一个是最好的?

PS:由于我基本上是在学术环境中,我也对业内使用纯 C 的人的观点非常感兴趣。我知道大多数纯C程序员都在嵌入式设备领域,我认为我面临的这种问题并不常见。但是,如果有人知道它是如何“在现实世界中”完成的,我会对您的意见非常感兴趣。

0 投票
17 回答
14458 浏览

computer-science - 什么本科计算机科学课程最能帮助程序员为工作做好准备?

这里的想法是让更好的程序员从大学毕业。

我想我必须使用算法,它不是你可以很容易地自己掌握的东西,我认为它可以让你更深入地看待软件的效率和正确性。

我也相信教授实际编程可能会有所帮助,但我学到了我在工作中学到的大部分编程知识,这让我认为其中一些编程课程块(不是全部)可以更好地使用。

这些结果将成为我想写给我以前学校的 CS 部门的一封信的一部分,我认为我参加的很多课程根本没有帮助,还有一些我认为非常宝贵的课程。

0 投票
9 回答
2465 浏览

c++ - 何时/为什么(如果有的话)我应该考虑进行通用编程/元编程

恕我直言,哎呀,设计模式很有意义,我已经能够实际应用它们。

但是当谈到现代 C++ 类型的“通用编程/元编程” 时,我感到很困惑。

——它是一种新的编程/设计范式吗?

——是否仅限于“图书馆开发”?如果不是,什么设计/编码情况需要使用元编程/通用编程。

-- 使用模板是否意味着我在做泛型编程?

我在这个话题上搜索了很多,但没有完全掌握大局。另见这篇文章


在阅读了下面的讨论之后,到目前为止,我确信(可能仍然不正确):

a) 通用编程和元编程是两个不同的概念。

0 投票
5 回答
1562 浏览

c++ - C++ - 通用编程 - 类型选择

以下片段返回 T 类型(假定为无符号)整数的下一个最高幂。它通过重复移位位来实现。

出于所有意图和目的,我在位移循环中使用的无符号类型足够大,可以表示(名义上)65536 位数。实际上,因此可以保持“原样”。

做一个专业的工作,应该在编译时选择循环计数器的类型,以保证它能够跨越 sizeof(T)*8 而不会溢出。

这可以在编译时使用 std::numeric_traits 完成吗?如果有怎么办?

从概念上讲,我希望能够编写如下内容:

基于以下讨论,我决定添加以下上下文。

换一种方式:

我们如何保证在编译时为模板代码的内部工作选择有效的(只要它们需要的大)和合适的类型?如果我们发现自己在模板代码中使用具体类型,我们可能会通过潜在的不透明路径对模板的类型做出无意的假设。

例如,如果我们坚持使用(比如说)一个 int 作为计数器,那么一切都会正常工作,直到有人将模板代码与他们的 bigint 库一起使用。这可以表示具有比 int 表示的更多二进制数字的整数。因此,我们是否应该将类型 unsigned long long 设为 long?当然,这只会延迟问题(尽管很长一段时间)?这个解决方案有“640K - 对每个人都足够大”或静态数组大小的阴影。

在这种情况下,显而易见但有些低效的选择是将计数器的类型设置为与数字 k 的类型相同。它(原则上)是低效的,因为我们只要求计数器能够表示与 k 的位数相对应的数字。对于其他情况,这可能是错误的假设。

一般情况呢?看起来元编程是一种合适的方法。如何保持这种“理智”?也许,正式地,要求是编译时函数将(可能派生的)抽象类型要求映射到类型。

也许这是 YABL(Yet Another Boost Library)的工作!

【抱歉乱说】

0 投票
5 回答
249 浏览

c# - 为什么“as T”会出错,但使用 (T) 进行强制转换不会出错?

为什么我可以这样做:

但不是这个:

它抱怨我没有足够地限制泛型类型,但是我认为该规则也适用于使用“(T)”进行强制转换。

0 投票
1 回答
1151 浏览

c++ - 什么是概念?

我听说过所有关于 C++0x 不再有概念的新消息(在 /.上),但我不知道它们是什么?有人可以向我解释吗?

0 投票
5 回答
2452 浏览

c++ - 在 C++ 中推断函数或仿函数的返回类型

我需要在不知道它是什么类型的情况下使用函数/仿函数的返回值(即作为模板)。

虽然我可以毫无问题地将它传递给第二个函数:

我想内联使用返回值(无需调用第二个函数):

这两种方法在概念上似乎与我相同(generic-programming-wize),但后者可以在 C++ 中实现吗?

0 投票
10 回答
12738 浏览

macos - 在 Windows 上为 Mac OS X 开发?

嗯,简单的情况。我碰巧是一名软件工程师,主要使用 Delphi 和 C# 进行软件开发。Delphi 非常适合桌面应用程序,而 C# 非常适合与 ASP.NET 结合用于 Web 应用程序。但是,我正在考虑自学更多关于 Mac 软件开发的知识。Xcode 和 Cocoa 将是开始的环境。学习新语言对我来说没问题!

但是,在开始在 Mac 上编写代码之前,我首先需要购买一个,而且它们的价格相当昂贵,所以购买一个是我需要几个月才能知道我需要哪个的决定。所以,现在为了帮助我,我想知道在不需要 Mac 的情况下我必须了解更多关于 Mac 开发的可能性!

例如,OS X 是否可以在 VMWare 环境中工作?开发工具是否也可用于 Windows?OS X 库是否有清晰的 API 概述?

还是我应该先买一台 Mac,用它玩几个星期,然后再决定如何为它开发软件?换句话说,我应该现在开始消费,还是几个月后开始消费?:-)