问题标签 [explicit-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 回答
1060 浏览

c++ - 如何为 C++ 模板类中的一种方法提供显式特化?

我有一个看起来像这样的模板类:

我想要的是仅A在保留默认值B和“其他内容”的同时提供明确的专业化。

到目前为止我尝试过的是

我尝试过的所有其他变体都因解析错误而失败。


我做了什么:

最初的问题是显式特化在头文件中,因此它被转储到几个目标文件中并弄乱了链接(为什么链接器没有注意到符号的所有实例都是相同的,只是闭嘴?)

解决方案最终是将显式专业化从头文件移动到代码文件。但是,要使头文件的其他用户不实例化默认版本,我需要将原型放回头文件中。然后为了让 GCC 真正生成显式特化,我需要在代码文件中放置一个正确类型的虚拟变量。

0 投票
6 回答
1140 浏览

c++ - 基于派生类型选择类的显式特化

您好我在选择具有明确专业化的模板类的正确版本时遇到问题。我想使用用于专业化的类的派生类来选择专业化。场景是:

正如我在评论中所说,我希望看到 20 被打印出来,因为 B 是从 A 派生的,但 10 被打印出来。如何在为每个派生类编写专业化的情况下调用专业化(我的实际场景有很多派生类型)。

0 投票
2 回答
502 浏览

c++ - 使用显式实例化设置类模板的方法

在问了这个问题并阅读了很多关于模板的内容之后,我想知道下面的类模板设置是否有意义。

我有一个名为的类模板ResourceManager,它只会加载一些特定的资源,如ResourceManager<sf::Image>,ResourceManager<sf::Music>等。显然我在 ResourceManager.h 中定义了类模板。但是,由于只有几个显式实例化,是否适合做类似...

简而言之,我试图找到最简洁的方法来处理声明和定义模板类及其方法,其中一些可能是显式的特化。这是一种特殊情况,我知道只会使用一些显式实例化。

0 投票
3 回答
2949 浏览

c++ - 如何根据类模板参数专门化成员函数

问题说什么。另外,是否可以内联执行此操作?

这是一个小例子,只是为了给出一个想法......

0 投票
3 回答
503 浏览

c++ - 显式实例化

这是由这篇文章引起的(第5页)

通话'f(x, s)'格式是否正确?我假设由于函数模板'f'是显式实例化的,因此将应用标准转换,因此'short s'将转换'int'为匹配对显式 specialization 的调用'f<int>'。但这似乎是不正确的?

标准的哪一部分谈到了在这种情况下的适用规则?

0 投票
1 回答
327 浏览

c++ - 普通功能不覆盖模板功能

我必须使用外部库,但是如果使用 std::string 调用它,则会从以下模板函数及其显式特化中得到“多重定义错误”。

即使我将第二个功能更改为

问题是一样的。

根据 [1],至少应该优先使用没有模板的版本(“普通旧功能”)而不是模板版本。

有没有人有线索,问题可能出在哪里?

[1] http://www.gotw.ca/publications/mill17.htm

0 投票
3 回答
607 浏览

c++ - 函数模板 - 显式特化与全局函数 (C++)

我知道使用函数模板是为了使函数具有可移植性,以便它们可以与任何数据类型一起使用。

如果我们对特定数据类型有更有效的实现,那么模板的显式专业化也会完成。

但是,除了显式特化,我们也可以只编写一个可以main. 这将为我们节省一些处理时间,因为编译器会比显式专用模板函数更快地定位非模板函数,这反过来会在效率方面更好。

那么,当我们可以选择调用非模板函数时,为什么还要使用显式特化呢?

如果我错了,请纠正我!

编辑1: 我的教授告诉我,每当我们制作函数模板并从中调用函数时main,编译器首先会查找模板化函数,如果无法找到该函数,则它会依次搜索函数模板创建一个模板函数,然后调用它。

0 投票
1 回答
1476 浏览

c++ - 为什么我在静态库中缺少显式模板特化的符号?

如果我编译以下代码:

我得到一个静态库,如果我在库上运行 nm,我会得到以下结果:

但是,如果我编译以下代码,除了我添加了模板类的显式特化之外,它是相同的......

...并重新运行相同的命令:

我没有匹配的符号。由于某种原因,即使我明确要求编译器实例化模板,它也不会实例化。

有人可以向我解释这里发生了什么吗?

0 投票
6 回答
637 浏览

c++ - 我应该如何做这个明确的专业化?

是否可以进行以下设计?:

现在,如果可能的话,我会为 doSomething 做一些明确的专业化,这样最后我会有一些如下版本:

这似乎是不可能的,我找不到任何语法来完成这项工作,然后我想也许设计应该如下所示,以便所有模板参数都应该传递给模板类本身:

然后我尝试了部分专业化,它甚至没有编译:

我得到以下显式专业化错误:
错误#1:类模板名称后面的模板参数列表必须按照模板参数列表中使用的顺序列出参数。
错误#2:'Container1':模板参数太少。

0 投票
3 回答
2179 浏览

c++ - 如何对多种类型进行一种明确的专业化?

考虑如下的模板函数,如何为多种类型显式专门化一个版本的函数:

目的是拥有一个专业而不是多个后续专业,因为 //something 是相同的:

有什么方法可以实现一个专业化?