问题标签 [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.
c++ - C++模板元魔法,模板调用点限定推演机制
我为这个例子的冗长道歉,我是从一个项目中设计出来的。注释的第 1 项和第 2 项在以下代码中很重要。
我不能将非常量迭代器带到我的成员容器(项目 2),其中范围内的函数是 const,如果我将迭代器切换到 const_iterator 一切正常,或者如果我使封闭函数非常量它也可以工作. 现在,经过一个小时的逆向工程,从以下错误消息中解决了问题,这很有意义:
test.cc:在成员函数 'void trampoline::bounce() const':test.cc:21: 错误:从 'boost::intrusive::tree_iterator<boost::intrusive::rbtree_impl<boost::intrusive 转换: :setopt<boost::intrusive::detail::base_hook_traits<x, boost::intrusive::rbtree_node_traits<void*, false>, (boost::intrusive::link_mode_type)1u, boost::intrusive::default_tag, 3 >, std::less<x>, long unsigned int, true> >, true>' 到非标量类型 'boost::intrusive::tree_iterator<boost::intrusive::rbtree_impl<boost::intrusive::setopt <boost::intrusive::detail::base_hook_traits<x, boost::intrusive::rbtree_node_traits<void*, false>, (boost::intrusive::link_mode_type)1u, boost::intrusive::default_tag, 3>, std::less<x>, long unsigned int, true> >, false>' 请求
最终导致我得到以下模板定义(/include/boost/intrusive/detail/tree_node.hpp +72):
够了所以说我很快就解决了这个问题......
该模板是如何IsConst
从封闭函数的调用点传递的?我的大脑已经准备好爆炸(据我所知,这很简单,但我很困惑)。详细的解释以及逐步实施来解释机制将是有帮助的。
关于 C++ 模板机制的类型推断/别名,我在这里有一个类似的问题。参考资料受到赞赏,但需要仔细考虑知识:D。如果你有耐心回答这个问题,你可能想尝试就另一个问题形成一个话语。
c# - 如何创建通用字典?
我有一个类,我有一个字典,其中包含一个特定的键。但价值应该是通用的。
就像是:
但是没有找到 TValue(很明显)但是我还应该输入什么?我找到了 IList 的解决方案,但我只想添加一个通用对象。
optimization - 用于组合优化问题的树搜索库
我注意到我遇到的一些“硬”组合问题可以用某种类型的树搜索(如 alpha-beta 剪枝、束搜索或类似算法)进行转换。 然而,对它们进行编程似乎是重复编码相同的东西,而且很容易出错。在我看来应该有一个实现这些算法的库,而我应该被要求写的是
- 解决方案的编码,即如何从不完整的解决方案中获得更具体的解决方案。这将给出树/图结构。
- 给定一个部分解决方案,如何获得最大/最小成本,以及可能的成本估算。
- 初始解决方案/部分解决方案。
- 也许某种验证解决方案。
很抱歉我没有给出任何具体的代码,但我想我已经解释了这个问题。如果我可以为上述功能编写代码,我是否应该能够轻松地运行许多树/图搜索算法?是否有任何用户友好的库/框架可以轻松支持这一点?我希望它使用 Python 或 C/C++,但很想听听任何建议。
编辑:更准确地说,我说的是知情树搜索算法。
c++ - C++ vs. D、Ada 和 Eiffel(带有模板的可怕错误消息)
C++ 的问题之一是我们从大量使用模板和模板元编程的代码中得到可怕的错误消息。这些概念旨在解决这个问题,但不幸的是它们不会出现在下一个标准中。
我想知道,这个问题对于所有支持泛型编程的语言来说都很常见吗?还是 C++ 模板有问题?
不幸的是,我不知道任何其他支持泛型编程的语言(Java 和 C# 泛型过于简化,不如 C++ 模板强大)。
所以我问你们:D、Ada、Eiffel 模板(泛型)是否也会产生如此丑陋的错误消息?是否有可能拥有具有强大通用编程范式但没有丑陋错误消息的语言?如果是的话,这些语言是如何解决这个问题的?
编辑:对于downvoters。我真的很喜欢 C++ 和模板。我并不是说模板不好。实际上,我是通用编程和模板元编程的忠实粉丝。我只是在问为什么我会从编译器那里收到如此丑陋的错误消息。
c++ - C ++模板编程结构与模板
要为类 cls 提供功能,比如“添加”,以下是我决定的类型:
对比
应该首选哪种方法,第一种方法比第二种方法有什么优势,反之亦然?
generics - 以通用方式操作 Scala 集合
我编写了查找最长公共子序列(LCS)的函数。例如,对于两个字符序列 BANANA 和 ATANA,它返回 AANA。实现是递归算法的幼稚低效适应,但这与这个问题的目的无关。
我想以最通用的方式重构这个函数。当前实现适用于任何类型的输入序列,但总是返回 List[T] 类型的集合。我想实现以下行为:
如果 LCS 也能处理String和Array那就太好了:
我相信在 Scala 2.8 通用集合库的帮助下,至少可以实现第一个要求。会很高兴看到“重型”机器,例如高级多态性、类型类、CanBuildFrom 等。
谢谢!
haskell - 如何安装通用haskell
安装完 hugs 然后安装 ghc6 然后安装 generic-haskell 有以下信息,怎么办?
在 ubuntu 我编译 ghc-6.2.2 得到以下错误
有人在 ubuntu 10 中安装了旧版本的 GHC 和通用 haskell 吗?
有很多对版本,我试过 ghc-6.2.2 出现上述错误,我是否需要卸载 ubuntu 10 才能安装旧版本的 ubuntu 才能正常工作?哪个版本的 ubuntu 适用于哪个版本的 ghc? http://www.cs.uu.nl/research/projects/generic-haskell/compiler.html
haskell - 使用 Typeable 在运行时部分应用函数(任何时间类型匹配)
通用编程时间!
如果我有一个功能:
和一个值
f
在编译时不知道值的哪个参数v
是正确的类型(如果有的话),我可以部分适用f
于v
吗?(使用 Typeable、Data、TH 或任何其他技巧)
稍微更扎实一点,我可以g
在运行时构造函数(如下)吗?它实际上不必是多态的,我所有的类型都是单态的!
我知道,使用 Typeable (typeRepArgs
特别是)v
是 的第三个参数f
,但这并不意味着我有办法部分应用f
.
我的代码可能看起来像:
有什么可以实现的magicApplyFunction
吗?
编辑:我终于又开始玩这个了。魔术应用功能是:
algorithm - 有没有什么算法可以在互联网上找到两个对等方之间的可用带宽?
我正在尝试开发一个程序来显示两个对等方之间的可用带宽。稍后这个模块将被集成到我的应用程序中,它使用 P2P 架构促进各种用户交互(聊天、桌面共享等)。
我在某个地方读到了 Spruce 算法来查找两个对等方之间的当前可用带宽,但我不确定是否可以使用它。
是否有任何已经开发的算法来实现这一点?请记住架构是 P2P。
当我开始研究它时,这似乎是一个更容易的问题,但现在我意识到它比看起来要困难得多,......所以我需要有经验和热情的网络程序员的帮助......
提前致谢..
c++ - 一般使用文件流
我想一般地使用文件流。也就是说,我想“编程到接口而不是实现”。像这样的东西:
可能吗?我不擅长继承。给定 io 类层次结构,我如何实现我想要的?