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

c++ - 从未调用过专门的 C++ 模板方法

还有另一个我无法解决的模板专业化问题:

终端日志.hh

terminallog.hh 继续(编辑感谢评论)

这编译得很好,没有错误。但是,当我尝试执行以下操作时:

它总是向我打印数组的指针地址。换句话说,专门的模板

永远不会被调用。我还通过额外的 cout 验证了这一点。无论我尝试什么,程序总是在调用

而不是专业。显然我的代码中必须有一个错误,但是我找不到它。

0 投票
2 回答
387 浏览

c++ - 重载的函数模板从未被调用

我喜欢模板,如果我能理解它们,至少我会这样做;-)。我使用模板实现了一个重载运算符。我现在正在尝试专门化函数调用。

这是我所做的:

现在我正在尝试类似的东西

编译得很好。但是执行代码时,它会打印 test3 的地址,而不是所有元素。我得出结论,编译器认为,

是更好的匹配。但是我不知道该怎么做。我的代码中的错误在哪里?为什么是

从来没有打电话?

0 投票
2 回答
8828 浏览

c++ - 模板类专业化

我确实阅读了一些相关的线程,但问题仍然不清楚:

编译错误:

从这个链接:coderSource.net

我错过了什么吗?我觉得我有。我什至尝试在那里定义函数,但这没有帮助。

0 投票
2 回答
98 浏览

c++ - 类模板部分专业化

以下代码编译成功,我不明白为什么:

部分特化不是意味着我们可以将类用于某些特定的数据类型,我们在特化中指定了这些类型吗?

这里没有专门的char类,如果要编译任何类型的数据类型,那么专门化的目的是什么?

0 投票
3 回答
6198 浏览

java - Java 泛型,支持“专业化”吗?与 C++ 模板的概念相似之处?

我知道如何使用C++ 模板——不是专家,请注意。使用Java 泛型(和 Scala,就此而言),我遇到了困难。也许是因为我试图将我的 C++ 知识转化为 Java 世界。我在其他地方读到,“它们完全不同:Java 泛型只是语法糖节省演员,C++ 模板只是一个美化的预处理器”:-)

我很确定,两者都是一个有点简化的视图。因此,为了了解大和细微的差异,我尝试从Specialization开始:

C++中,我可以设计一个模板(函数类),它作用于支持我所需操作的任何类型T

现在,这可能会将plus()操作添加到任何可以add().[note1][1]的类型

因此,如果T支持add(T)我的模板就可以工作。如果没有,只要我不使用plus(). 在 Python 中,我们称之为“鸭子类型”:*如果它的行为像鸭子,像鸭子一样嘎嘎叫,它就是鸭子。*(当然,使用 type_traits 会稍微修改一下,但只要我们没有概念,这就是 C++ 模板的工作方式,对吧?)

我想,Java 中的泛型也是这样工作的,不是吗?通用类型 I 设备用作“模板”,如何对我尝试放入的任何内容进行操作,对吗?据我了解,我可以(或必须?)对类型参数设置一些约束:如果我想add在我的模板中使用,我必须将类型参数声明为implement Addable. 正确的?所以,没有“鸭子打字”(无论好坏)。

现在,在C++中,我可以选择专注于没有 的类型add()

即使所有其他类型仍然可以使用“默认”实现,现在我添加了一个特殊的MyX——没有运行时开销。

是否有任何具有相同目的的Java 泛型机制?当然,在编程中一切都是可行的,但我的意思是在概念上,没有任何技巧和魔法?

0 投票
3 回答
82 浏览

c++ - 无法专门化结构

为什么这不起作用?

0 投票
5 回答
1769 浏览

c++ - 在运行时选择正确的模板特化

我有

在代码中的不同位置进行专业化。我如何才能在运行时调用正确a<i>::fi已知值?

我不想i在一个大的switch.

编辑:

我想到了类似的东西

但它崩溃了(我错过了强制实例化的东西吗?),我不喜欢那个 dummy 不是static const(并且使用内存),当然这arrsize比必要的要大。


实际问题:只有在运行时generate (int i)调用为给定a<i>::generate ()生成类实例的函数。设计(类)是给定的,它们继承自基类,并且可以随时在代码中的任何地方添加更多的专业化,但我不想强迫每个人手动更改我的,因为这很容易被忘记。a<i>ia<i>generate (i)

0 投票
2 回答
8813 浏览

c++ - 具有非类型参数的成员函数的部分特化

我有一个带有类型和非类型模板参数的模板类。我想专门化一个成员函数,我发现,如下例所示,我可以做一个完整的专门化。

但是,这种部分专业化不会编译。

有没有办法实现我正在尝试的任何人都知道?我在 MSVC 2010 中试过这个。

0 投票
4 回答
407 浏览

c++ - 模板重构

假设我们有几种类型的元素,我们想为每种类型创建一个“管理器”。管理器负责任何元素的创建、激活/停用和删除(我们假设用户在不使用管理器的情况下不会创建/销毁这些元素的实例。一个非常简单的代码示例如下所示:

现在让我们想象一下,对于一组对象,除了基本操作之外,我们还需要做一些缓存。对于该类型的子组,我们可以像这样定义另一个“管理器”:

很明显,除了三行标记为 so 之外,两位经理完全相同。我如何重构这两个模板?我们在编译时就知道特定类型是否可缓存。请注意,析构函数中还有另一行。任何可行的建议(虚拟继承、模板专业化、SFINAE ......)都将受到欢迎。

0 投票
3 回答
1816 浏览

c++ - __stdcall 函数指针的模板部分特化

上面的代码在 Visual C++ 2010 中给了我以下错误:

如您所见,__stdcall修饰符的问题。这是编译器错误吗?