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

c++ - 如何通过继承专门化复杂模板 - C++

我似乎找不到合适的语法来专门处理这个模板:

我想保留<Object>作为模板参数,但专门化所有其他参数。我正在尝试这样:

这会产生错误。

请问有人可以提供正确的语法来专门化模板和实例化专门版本的语法吗?

0 投票
4 回答
9797 浏览

c++ - 部分专用类上的标记调度与静态方法

假设我想编写一个通用函数,如果是 POD 类型void f<T>(),它会做一件事,如果是非 POD(或任何其他任意谓词),它会做另一件事。TT

实现这一点的一种方法是使用标签调度模式,就像标准库对迭代器类别所做的那样:

另一种方法是使用部分专用类型的静态成员函数:

使用一种方法相对于另一种方法的优缺点是什么?你会推荐哪个?

0 投票
5 回答
1114 浏览

c++ - C++: partial function specialization for void not allowed - alternative solution?

I think I understand by now why partial function templates are considered confusing and unnecessary, and are thus not allowed by the C++ standard. I would however appreciate some help with re-phrasing the following function w/o partial specialization. FWIW, the function is a member of a non-specialized class:

The problem here is that I can't overload on the function's return type. Also, the typename I want to specialize on is not used as function parameter - another reason why overloading does not help. Yes, I could introduce a dummy parameter, to force overloading, but that is ugly, isn't it?

Finally, why the heck isn't 'void' a type in C++? That would make things so much more consistent... But I am probably missing the complete picture...

0 投票
1 回答
2181 浏览

c++ - 部分模板特化

我有一个场景,其中有一个模板类

然后我希望 A() 方法在 X 是给定类型时具有不同的行为(但 B 和 C 可以保持不变,实际代码实际上还有大约 10 种其他方法,其中一些很长而且经常调整..所以我宁愿避免进行全类专业化并复制和粘贴全类实现)

我继续写道:

但是我的编译器(clang 163.7.1)甚至拒绝将其视为任何类型的模板专业化。

我编写代码的方式是否隐藏了一些语法错误,或者这种编码风格是无效的 C++?不幸的是,即使其他编译器确实支持这个成语,我的公司也被 clang 困住了。

感谢您对此的任何帮助。

0 投票
4 回答
2388 浏览

c++ - 避免模​​板特化中的函数定义重复

类 Widget 有一些函数适用于所有参数类型(常用函数)和其他需要为给定类型专门化的函数(不常用函数)。

g++ 坚持认为 Widget 的特化也应该定义 common_fn() 而不仅仅是 uncommon_fn(),但这首先违背了使用特化的目的。如何避免重复 common_fn()?

开始编辑

对阿尔夫:

我无法使用

因为一些不常见的函数需要返回一个特征类型(因此通过使实际类型为原始类型来简化是过度的)。

或者实际上有一种方法可以让编译器typename Foo::Bar在编写时识别

?

结束编辑

开始编辑2

致艾米林德:

这很有趣,但出于同样的原因,我无法使用来自 Widget 的派生(或者可能更清晰的将公共部分重构为父类 GeneralWidget 的解决方案)。共同的部分并不完全共同。它们的声明和定义看起来相同,但因为它们使用了特征,所以它们最终完全不同。

结束编辑2

0 投票
1 回答
236 浏览

c++ - 使用特征时避免在部分模板特化中重复函数定义

Widget<A<T> >在下面的代码中,如何在所有专业化(对于and Widget<B<T> >,无论 T 是什么)中共享 common_fn() ?

我之前曾尝试问题简化为我认为的本质,​​但事实证明有必要在部分专业化和特征的背景下提出这个问题。

0 投票
1 回答
790 浏览

c++ - 具有嵌套非特化类型的模板特化

我在制定嵌套部分模板专业化的语法时遇到了麻烦。无论如何,我认为这是正确的表达方式。我想要的是一个as()返回转换值的函数。在大多数情况下static_cast都可以正常工作,所以我有一个通用版本可以做到这一点,但在某些情况下我想具体一点。我遇到的麻烦是当尝试返回两个相似的模板类类型时,使用一个常见的typename.

这就是设置。实际上,我不是 100% 确定这是否是最好的方法,但它在 GCC 中编译并且似乎可以工作,所以......无论如何。现在我想专门研究另一种模板化的类型(在这种情况下,Eigen::Matrix<T,4,1>-- 但std::vector也可能及时使用,即从 astd::vector<T>转换为 a std::list<T>),它是部分模板化的:

这有道理吗?如果我采用不同大小的 Eigen::Matrix 并专门处理它们,那么稍微不同的版本呢?

我知道上面的两个代码位不起作用,而且语法可能很糟糕,这就是我想要解决的问题。如果这是重复的,请原谅。我看了几个类似的问题,但似乎没有一个完全是关于这个的,或者我只是没有看到它。

0 投票
2 回答
214 浏览

c++ - 有没有一种方法总是首选部分专业化而不是主模板?

我在问自己

您能否编写一个类模板和相应的部分特化,使得对于参数的任何模板参数集,编译器都采用部分特化?

例如

我似乎记得读过这可能以某种方式实现,但我忘记了使这项工作的确切算法。

0 投票
2 回答
5752 浏览

c++ - 具有多个模板参数错误的模板偏特化

当我在具有一个模板参数的类上使用模板部分特化时,我可以特化这样的方法:

方法 foo 专门用于 Dim = 1。但是一旦我向我的类添加模板参数,就像这样:

编译器(VS2010)抱怨这些错误:

在我看来,没有歧义,编译器应该能够解决所有问题并像一个参数案例一样工作。

如果 C++ 不支持,请解释原因。

0 投票
6 回答
111812 浏览

c++ - C++ 函数模板部分特化?

我知道下面的代码是一个类的部分特化:

我也知道 C++ 不允许函数模板部分特化(只允许完整)。但是我的代码是否意味着我已经为一个/相同类型的参数部分专门化了我的函数模板?因为它适用于 Microsoft Visual Studio 2010 Express!如果不是,那么您能否解释一下部分专业化的概念?