问题标签 [specialization]

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 投票
2 回答
1453 浏览

c++ - 类模板中函数的专业化顺序是否重要

考虑类似...

请注意专业化如何高于非专业化版本。如果我将专业版本放在非专业版本之下Vector<float>, == 比较是否仍能按预期工作?出于某种原因,我想我记得读过,如果您在这种情况下将专业化放在下面,那么当编译器查看标头时,它将首先看到默认值,看看它是否有效,然后使用它。

0 投票
3 回答
606 浏览

c++ - 在常规类中声明模板的显式特化的实例

我根本无法编译它。我可能不可能,但我不知道为什么不应该。

看起来编译器抱怨“必须在使用前声明显式特化“类 A::B”。” 如果我尝试在注释行中提供 froward 声明,编译器会抱怨“必须在包含模板的命名空间中声明显式特化“B”。” 我们在这里使用 2 种不同的编译器。这个错误来自 IBM 在 AIX 上的“xl”编译器,但在我们的 Sun 系统上编译时,我得到了类似的错误,但措辞不同。这似乎是一个第 22 条规则。

显然,这是一个高度人为、简单化的例子,但它代表了问题所在。我想在一个类中定义一个模板类,因为模板类只与包含类有关。不应从类外部访问模板。

我错过了什么吗?

0 投票
4 回答
21011 浏览

c++ - 具有多个模板参数的 C++ 单模板特化

你好!

我只想专门化两种模板类型中的一种。例如template <typename A, typename B> class X,应该对单个函数有一个特殊的实现X<float, sometype>::someFunc()

示例代码:

主.h:

主.cpp:

编译失败class B。这是真的吗,这在 C++ 中是不可能的吗?最好的解决方法是什么?

[编辑]

template <float, typename I> void B<float, I>::someFunc();导致 main.h:26: 错误:'float' 不是模板常量参数的有效类型

template <typename I> void B<float, I>::someFunc();导致 main.h:27: 错误:无效使用不完整类型 'class B'</p>

我正在使用 gcc。

[编辑]

我不想专门化整个班级,因为还有其他没有专门化的功能。

0 投票
3 回答
201 浏览

templates - 一个专用 D 模板中的多种类型

说我必须以某种方式处理ushortuintstring不同。所以猜想我需要一个专门的模板和string另一个。是吗?ushortuint

这就是想法,尽管代码无法编译。它是有效的还是非常糟糕的?

0 投票
5 回答
252 浏览

design-patterns - 仅许多处理程序中的一个应基于专业化进行操作的模式

我正在尝试重写一些代码以解决一些耦合问题并使其更容易在将来修改。

现在,我在基类中有一个静态工厂方法,可以根据情况选择适当的实现。该决定基于专业化程度:

虽然类型 A 和 B 都可以处理这个问题,但 B 是专门为这种情况设计的,是正确的选择。

因此,基类与所有实现紧密耦合,并且在创建新的专用实现时必须重写此方法。

我正在考虑使用责任链模式来打破这种耦合。但是,我看不到确保执行最合格的实现的方法。如果我把它交给实现来做出这个决定,我不能保证它们会按专业化的顺序被查询而不会遇到相同的耦合问题。

有没有处理这种情况的模式或方法? (我最好的猜测会阻碍部署;我会把它放在我的后兜里,以免每个人都说“是的,这是唯一的方法!”)

0 投票
1 回答
281 浏览

c++ - C++ 模板特化

你好!有人知道实现或模仿以下行为的方法吗? (此代码导致编译时错误)。

例如,我只想在派生类中添加特定的模板特化。

0 投票
6 回答
41191 浏览

c++ - 朋友声明声明了一个非模板函数

我有一个类似于下面代码的基类。我正在尝试重载 << 以与 cout 一起使用。但是,g++ 说:

我尝试在类声明/原型中的 << 之后添加 <>。但是,我明白了does not match any template declaration。我一直在尝试将运算符定义完全模板化(我想要),但我只能让它与以下代码一起使用,并手动实例化运算符。

基础.h

基础.cpp

我想在标头base.h中包含这个或类似的:

我在网上其他地方读到,在原型中将 <> 放在 << 和 () 之间应该可以解决这个问题,但事实并非如此。我可以把它变成一个单一的功能模板吗?

0 投票
1 回答
255 浏览

c++ - 是否可以重载模板类?

我发现模板方法可能被重载,我可以在模板类上做同样的事情吗?如果 2 个模板类匹配一个模板类实例化,我们可以使用构造函数中的参数类型来推断使用哪一个。

0 投票
1 回答
298 浏览

class - 如何使用 UML 或类定义限制特殊类中的多重性和其他属性

我正在尝试创建一个 UML 类图和相应的类定义(例如,在 C# 或 Java 中),其中我有一个通用的关系层次结构和一个或多个基于该一般关系但约束它的专用类。

例如,假设我有以下一般 UML 关系(假设它看起来像 UML):

(读作:路由器包含 1 个或多个卡,每个卡包含一个或多个端口)

然后我想扩展它并定义一个专门的类,例如 CiscoRouter。

此外,假设 CiscoRouter 只能有 1..10 个卡。有没有办法在模型中定义这个限制?

我可以执行以下操作:

但是,从技术上讲,这会创建两个单独的 Card 对象集合,对吗?关于如何最好地定义这一点的任何建议?

实际设计可能会更复杂,因为我们需要 Cisco7200Router、LinkSysRouter 等类以及自定义卡、端口等。例如:

为了增加另一个复杂性,假设路由器有一个名为 Weight 的属性。但是,在 CiscoRouter 中,我们实际上希望将该属性定义为某个值,例如 4 Lbs(例如,我们的模型以某种方式声明 CiscoRouter 重 4 Lbs,有 10 个卡,每个卡有 4 个端口)。我如何定义这个?

我知道我可以使用抽象类、方法等在代码中做很多这样的事情;但我想知道是否有任何干净的方法可以在模型或元数据中尽可能多地定义这些内容,以便我可以从中生成一些设计文档而无需执行任何操作。

提前致谢,

0 投票
2 回答
423 浏览

c++ - C++ 模板是否可以检查给定类型的函数是否已重载?

我有一个模板函数,我希望在不同的地方为不同的类型模板化。
问题是我想在编译时知道给定类型是否有专门化以两种不同的方式生成另一个模板。

我知道你可以像这里一样测试函数是否存在。

关于如何测试工具是否已专业化的任何机会?

想象一下,我想生成一个 isbool(),如果 tobool() 已被特化则返回 true,否则返回 false。