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

c++ - 模板特化是否需要 template<> 语法?

我有一个类似于这样的访客类:

显然,operator()(bool b)它旨在成为上述模板函数的特化。

但是,它没有template<>我之前看到的语法,将其声明为模板特化。但它确实编译。

这安全吗?它是否正确?

0 投票
1 回答
34933 浏览

c++ - 函数模板特化格式

以下函数模板中第二个括号 <> 的原因是什么:

这出现在SO question中,有人建议在 之后缺少括号operator(),但是我找不到解释。

如果它是以下形式的类型专业化(完全专业化),我理解其含义:

但是对于函数模板:

这在哪里适合这个场景?:

似乎可以工作并且没有给出任何警告/错误的示例代码(使用 gcc 3.3.3):

输出:

0 投票
4 回答
1397 浏览

c++ - 是否可以在专用模板类中访问非类型模板参数的值?

是否可以在专用模板类中访问非类型模板参数的值?

如果我有专门的模板类:

我知道在上面的情况下,硬编码值 4 和 0 而不是使用变量很简单,但是我有一个更大的类,我正在专门研究它,我希望能够访问这些值。

是否可以在 A<4,0> 中访问majorminor值(4 和 0)?还是我必须在模板实例化时将它们分配为常量:

0 投票
1 回答
37175 浏览

c++ - 函数的 C++ 模板特化:“非法使用显式模板参数”

以下模板特化代码:

测试用例 1:

测试用例 2:

生成以下编译错误:

错误 C2768:“spec1”:非法使用显式模板参数

有谁知道为什么?

0 投票
3 回答
2904 浏览

c++ - 创建新的原始类型

有没有办法创建一个类似于基本类型之一的新类型(例如 char),并且可以在两者之间进行隐式转换,但会在模板中以不同的方式解析,例如,以下代码可以工作?

我在想一个包含单个数据成员的类可能是可能的,如果是这样的话,最干净的方法是什么,编译器是否能够像它是一个原语一样优化它。

编辑:我尝试了 BOOST_STRONG_TYPEDEF,这似乎适用于基本的东西,但是我怎样才能继续从新类型创建 std::basic_string 呢?

第一个并没有真正起作用,因为生成的类型仍然需要 char 为其所有方法,而第二个似乎不喜欢构造函数和赋值运算符的存在:(

我还没有尝试过其他方法来创建新的 char 类型,如果我不能使用 BOOST_STRONG_TYPEDEF 是否能够解决这个问题?

0 投票
3 回答
293 浏览

c++ - 模板专业化的模板参数?

嗨,我有一个模板类的静态成员,我想为一组模板类定义,即:

可悲的是,这在 gcc 4.1.1 下引发了以下错误

D:\X\Foo.h(98) : 错误:模板参数 1 无效

在线上:template<> template<typename T> int FooT< template Foo<T> >::ms_id = 10;

我做错了什么是首先允许的一般概念?

0 投票
4 回答
23451 浏览

c++ - 枚举的模板特化

是否可以为枚举专门化模板化方法?

类似的东西(下面的无效代码):

在不可能的情况下,假设我有多种类型的特化,比如int, unsigned int, long long,unsigned long long等,那么枚举值将使用哪些特化?

0 投票
5 回答
192 浏览

c++ - C++ 编译器是否可以尝试不同的(模板 T)实现,直到找到一个可以编译的(用于 T)?

这可以实施吗?

如果没有,有什么替代方案?

0 投票
5 回答
3425 浏览

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

我有一个清理功能,我只想在(传统)指针类型上运行。

我的问题是函数模板,我可以将函数限制为仅指针,但是由于函数指针和常规指针之间的转换规则差异,我遇到了问题。

Sanitize()函数需要针对一大堆类型运行,其中一些是指针,需要清理,另一些是不同arity和参数类型的函数指针,不应清理,其中一些是非指针数据也不应该消毒的类型。

有什么明显的我失踪了吗?

0 投票
2 回答
536 浏览

c++ - 当模板参数相同时,C ++优化类模板函数

我有一个模板类,其中包含一个模板方法,提供两个模板参数 T 和 U。该操作非常昂贵,并且在分析中显示为 CPU 时间的主要用途。我可以对其进行一些优化,但仅适用于 T == U (这很常见)的情况,但是我不确定这样做的语法......

有问题的类和方法如下所示:

Foo::bar 通常是从其他模板代码调用的,所以即使我创建了一个单独的方法(例如“T fastBar()const”),我也不知道 id 如何让其他模板代码尽可能调用该版本...

我试图为 T == U 创建一个明确的专业化,但 VC9 给了我错误

错误 C2768:“Foo::bar”:非法使用显式模板参数