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

c++ - 嵌套模板专业化

我有一个模板类,当模板参数与类的类型相同时,它需要一个专门的构造函数。下面的代码不会编译。

当类型为 Dual 时,指定使用特定构造函数的正确语法是什么?特别是,当模板参数的类型为 Dual 时,我需要在初始化器列表中初始化成员 'real',但如果不是(例如 double 类型)则不需要。

0 投票
2 回答
1849 浏览

c++ - “'<' 标记之前的预期初始值设定项”尝试模板成员特化

我正在尝试在模板类中定义模板成员。

这是头文件的片段:

因此定义了模板成员,但我想对 docopy 方法进行显式特化,以便在类型为指针时进行深度复制。我将使用方法模板和特化从头文件中放入另一个片段:

编译器向我发送以下错误:“<”标记之前的预期初始化程序。

我无法弄清楚我做错了什么。有什么帮助吗?

0 投票
1 回答
1109 浏览

optimization - 如何正确使用 GHC 的 SPECIALIZE pragma?(示例:使用 Identity 从一元函数中专门化纯函数。)

例如,假设我想在列表上写一个单子和非单子映射。我将从一元的开始:

现在我想重用代码来编写纯代码map(而不是重复代码):

有什么必要让它像明确写成map'一样优化?map尤其是:

  1. 有必要写吗

    或者 GHC 是否优化map'了自身(通过Identity完全分解)?

  2. 还需要添加其他任何内容(更多编译指示)吗?

  3. 如何验证编译map'后的显式编写代码的优化程度map
0 投票
1 回答
3932 浏览

c++ - 类模板状态数据成员,而不是可以显式特化的实体

我在下面的代码中遇到错误:

我该如何解决?

0 投票
2 回答
1993 浏览

c++ - 类方法的显式特化 - 符号已定义

单一定义规则规定程序应该包含每个非内联函数的一个定义。对于模板类的成员,这对我来说并不完全清楚:

在这种情况下,clientX.obj 和 clientY.obj 都有一个 .obj 的定义Foo<int>::foo。链接器抱怨这个符号被定义了不止一次:

当我inline添加 的定义时Foo<int>::foo(),一切顺利,链接器很高兴。此外,当我在单独的编译单元(例如 intfoo.cpp)中定义它们时。

(注意:此解决方案在https://stackoverflow.com/a/1481796/6610中提出)

可能是一个误解,但模板类的成员函数不是总是“内联”的吗?这里的规则是什么?

0 投票
2 回答
737 浏览

c++ - 我可以创建匹配枚举类型的类模板的部分模板特化吗?

我有一个由一组类模板显式特化提供支持的函数模板,其语法如下

(在哪里GetAs<t>是这样的:

)

当该类型是枚举时,我想有一个专门DesiredType化,以便返回的类型与枚举的基础类型(或enum class)匹配。

这是可能的还是客户只​​需要自己指定基础类型?


我试图允许这样的代码:

0 投票
2 回答
56 浏览

c++ - 名称查找:在类定义中使用非限定类名/省略模板参数的缺点?

在最近的一次讨论中,关于我们是否应该始终在类定义中完全限定当前类的名称以及在引用当前模板本身时还使用显式专用模板的问题出现了。把它们加起来:

问题是,没有人可以用确凿的事实来支持他们的说法,这仅仅是“名称查找可能出错”与“嗯,从来没有任何问题”。

为了解决这个问题:这两个约定是严格等效的,还是“坏”的约定有时会在名称查找中引入歧义?对当前标准的引用会非常好。

当然,不应该考虑易读性的论点,我真的在问符合标准的编译器在极端情况下会如何表现。但是,也欢迎已知的实现错误。

0 投票
1 回答
1583 浏览

c++ - SFINAE:检测需要显式特化的模板函数的存在

作为我之前的问题的后续,我试图检测需要显式专业化的模板函数的存在。

我当前的工作代码检测到非模板函数(感谢 DyP 的帮助),前提是它们至少采用一个参数,以便可以使用依赖名称查找:

(该ENABLE_FOO_BAR宏仅用于测试目的,在我的真实代码中我没有这样的宏,否则我不会使用 SFINAE)

当编译器可以自动推导出模板参数时,这也可以与模板函数完美配合:


但是,当我尝试检测需要显式特化的模板函数时,会在存在static_assert时启动:foo::bar()

显然编译器无法推断出模板参数,bar()因此检测失败。我试图通过明确地专门调用来修复它:

这在foo::bar()存在时工作正常(该功能被正确检测到)但现在所有地狱foo::bar()不存在时都会崩溃:

看来我的显式专业化尝试失败了,因为编译器不知道这bar是一个模板。

我将为您省去我试图解决此问题的所有内容并直奔主题:如何检测template<typename T, typename U> T bar(U);需要显式特化才能实例化的函数的存在?

0 投票
0 回答
157 浏览

c++ - 类模板成员的显式特化

试图确定类模板成员显式特化背后的逻辑,我在下面编写了这段代码:

它编译没有任何问题。但是当我引入如下所示的更改时,它根本拒绝编译:

错误:

1>d:\projects\programs\youtube\lesson\lesson\main.cpp(17): error C3860: template argument list following class template name must list parameters in order to used in template parameter list 1>d:\projects\程序\youtube\lesson\lesson\main.cpp(17):错误 C3855:“X”:模板参数“T”与声明不兼容

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

0 投票
0 回答
72 浏览

c++ - 在 initializer_list 上专门的函数模板不起作用?

我知道专门化功能模板是错误的

这个问题是出于好奇。

说我有一个函数模板

我专攻它

我称之为

我收到指向主模板的错误“没有与括号括起来的初始值设定项列表匹配的 foo 实例”(重载工作正常)

但是如果我将函数基础模板更改为将 initializer_list 作为参数,一切都可以。

到底发生了什么?

编译器:gcc 4.8.2 有用的链接