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

c++ - 类模板部分专业化的问题

我一直在尝试实现一个需要部分模板专业化并回退到静态结构技术的函数,但我遇到了很多问题。

首先:该结构嵌套在另一个类(提供 Push 作为成员函数的那个​​)中,但它无法访问模板参数(StackSize),即使我的其他嵌套类都可以。我已经解决了这个问题,但如果他们可以像普通类一样访问 StackSize 会更干净。

第二:编译器抱怨它不使用或不能推导出T。真的吗?

第三:编译器抱怨它不能在当前范围(类范围)中专门化一个模板。

我看不出有什么问题。我是否不小心调用了一些错误的语法?

0 投票
2 回答
1572 浏览

c++ - VS2010 C++成员模板函数特化错误

我有以下(最小化)代码,它在 VC2005 中工作,但在 2010 年不再工作。

似乎当“index_type”是依赖类型时,我总是在专业化上得到一个 C2770: invalid explicit template argument(s) 错误。请注意,此代码实际上足以生成错误 - 一个空的 main 足以编译它,甚至不需要实例化模板。

如果 index_type 不是依赖类型,它可以正常工作。任何想法为什么在 VC2010 中如此,如果这实际上是标准行为或错误,如果我可以解决它?

0 投票
3 回答
190 浏览

c++ - C++基本模板问题

我对模板专业化有点困惑。

我有 classes Vector2Vector3其中有operator+=(定义如下)。

现在我想添加通用的添加行为并说如下:

这编译得很好并且适用于Vector2Vector3但是假设我想为我的“+”操作稍微高效一些,Vector2并且我希望它按照以下方式运行(使用模板专业化)

这对我来说看起来不错,但不幸的是,将这两个代码块放在一起会使代码编译失败

(链接器说错误LNK2005: "Vector2 const operator+<Vector2>(Vector2 const &,Vector2 const &)" (??$?HVVector2@core@lf@@@core@lf@@YA?BVVector2@01@ABV201@0@Z) already defined in ...

我的错误是什么,我哪里出错了?

谢谢你。

0 投票
2 回答
356 浏览

c++ - C++ 模板特化编译

我将详细概述我的问题以解释我想要实现的目标,如果您想忽略我的问题的细节,问题在最后一段。

我有一个类设计问题,我希望将任何类型的值传递给函数push()pop()这些函数会将传递的值转换为字符串表示形式,该字符串表示形式将附加到类内部的字符串中,从而有效地创建数据流。反过来会发生pop(),获取流并将流前面的几个字节转换回指定的类型。

制作push()pop()模板绑定stringstream是一个明显的解决方案。但是,我希望在 DLL 中使用此功能,我可以在其中更改字符串的存储方式(例如加密或压缩),而无需重新编译客户端。T如果算法发生变化,则需要重新编译类型模板。

我的下一个想法是只使用 , , 等函数pushByte()pushInt()popByte()popInt()允许我在不重新编译客户端的情况下更改实现,因为它们仅依赖于静态接口。这样就好了。但是,它不是那么灵活。例如,如果一个值从一个字节更改为一个短字节,则与该值对应的所有 pushByte() 实例都需要更改为pushShort()popByte()类似于popShort()。重载pop()push()解决这个问题会导致类型冲突(导致显式转换,这最终会导致同样的问题)。

有了上面的想法,我就可以创建一个工人阶级了。但是,我想知道如何编译专门的模板。如果我创建push<byte>()and push<short>(),这将是一个特定类型的重载,并且从 byte 到 short 的更改会自动切换使用的模板,这将是理想的。

现在,我的问题是,如果我只使用专门的模板来模拟这种重载(没有 type 的模板T),所有的专门化是否都会编译到我的 DLL 中,从而允许我在不重新编译客户端的情况下调度新的实现?T还是在客户端编译时以与模板类型相同的方式选择或删除专用模板?

0 投票
2 回答
445 浏览

vb.net - 特化一个泛型变量

我有一个通用方法,我想为Strings.

我发现DirectCast(DirectCast(value, Object), String)获得了String价值(当我已经确认时GetType(T) Is GetType(String))并且DirectCast(DirectCast(newvalue, Object), T)正如在类似问题的许多答案中提到的那样有效。

但是还有什么更优雅的东西吗?它是高性能的吗?

0 投票
3 回答
2982 浏览

c++ - 模板函数特化默认参数

它在令牌上的函数默认参数行上给出语法错误 C2689 和 C2059 ::。但没有专业化,它做得很好。如果我更改默认参数并仍在进行专业化:

问题也消失了。

现在如果我这样使用它:function<int>(1,2,3);或者function<float>(1.0f)它很好,所以看起来如果模板函数是专门的,我们必须在调用它时重写默认参数?

但是在我的第二种情况下,我在调用时替换std::numeric_limits<T>::..T(..)没有语法错误function<int>(1),这是为什么呢?

(我正在使用 Visual Studio 2010 x64)

由于最初的问题是由于错误,现在问题变成了如何解决它?

0 投票
6 回答
367 浏览

c++ - C++:模板化类的继承与包含

我有以下结构:

我想对它进行专门化,这样我就可以添加一个运算符,这样该类型就可以很好地与 STL 集配合使用。(我不能Odp直接修改;它是遗留代码。)这是我看到的两种方法:

有什么理由更喜欢第二个而不是第一个?第一种方法似乎允许更简洁的代码:

(此外,我可能对“模板专业化”一词的含义感到困惑。)

0 投票
6 回答
1149 浏览

specialization - 多专业好还是单专业好?

我注意到很多关于要求申请人了解多种语言或技术的职位发布。特别是我在 Web 开发中发现了这一点。考虑到你越专注于几件事,你对每一件事的了解就越少,我真的不喜欢这样。我承认,当您可以付钱给一个人做很多事情时,这对底线是有好处的,但是对于实际上不是他们的错的劣质服务是否值得?一个好的阅读是这样的研究

它表明,您执行多项任务的次数越多,您所做的工作质量就越差。

这是我的问题。我真的很想只专注于一些事情,因为我喜欢擅长我所做的事情,当我告诉别人我可以做他们想做的事时,我不想撒谎。如果我在许多技术领域工作,那么在一些事情上更加专业会让我更难找到工作吗?

第二点。我的父亲是一名 DBA,他告诉我,我会惊讶于有多少人只学了足够的东西来欺骗他们知道的雇主,然后在被录用后才学会。然后他告诉我,如果我需要,我也应该这样做。我不喜欢它,只想申请我自信地知道该怎么做的工作。我认为这是正确的事情,但我很难找到工作,而撒谎的人会更容易找到工作。这是我总是要处理的事情吗,从长远来看,更多地专注于一些事情对我来说会更好吗?

我猜有趣的事情,只是想从有经验的开发人员那里知道。我今年 21 岁,专攻 html/css、javascript 和 python。我也知道一些口齿不清的东西,但只是涉足。

多谢你们

0 投票
2 回答
466 浏览

c++ - 模板的 C++ 部分特化错误

我正在使用 PC-Lint(用于静态代码分析的出色工具 - 请参阅http://www.gimpel.com/)对于以下代码块:

PC-lint 给了我一个警告:

我相信代码很好,错误就在 lint 方面,但我认为 Lint 工具真的是很棒的工具,而且它更有可能比我不知道的东西。那么这段代码可以吗?

0 投票
3 回答
125 浏览

c# - 类型专业化;如何确定每种特定类型并做出反应?

想象一下,我有一个普通班Person。然后我有那个类的专业,例如DanishPersonBritishPerson

现在我需要一个函数来返回正确的 Persons 实例,具体取决于他们所在的国家/地区,或者一种轻松确定他们是什么类型的人的方法。所以我有这个功能:

人员列表包含类型为DanishPerson的对象BritishPerson。根据类型,我需要在我的 UI 中显示正确的 ViewModel。因此,如果列表包含类型为 的丹麦人DanishPerson,我需要显示一个 UI 来显示丹麦特定属性(以及更多)。

现在我的问题是你如何以最好的方式做到这一点?我想我总是可以使用 if/else using typeof,但我希望有一种更优雅,也许是通用的方式?我在想可能有一些模式可以做到这一点,因为这对我来说似乎是一个常见问题,在处理专业时?