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

c++ - 部分模板专业化的“不完整类型的无效使用”错误

以下代码:

给我错误

(我正在使用 gcc。)我的部分专业化语法是否错误?请注意,如果我删除第二个参数:

然后它可以正确编译。

0 投票
6 回答
646 浏览

language-agnostic - 还有哪些其他支持“部分专业化”的语言?

部分模板特化是 C++ 中泛型编程最重要的概念之一。例如:实现一个通用的交换函数:

将其专门用于支持 O(1) 交换的向量:

因此,当您在通用函数中调用 swap(x, y) 时,您始终可以获得最佳性能;

非常感谢,如果您可以在替代语言中发布等效的(或语言的部分专业化的规范示例,如果该语言不支持交换概念)。

编辑:所以看起来很多回答/评论的人真的不知道部分专业化是什么,并且通用交换示例似乎妨碍了某些人的理解。一个更一般的例子是:

部分专业化将是:

一个完整的专业化将是:

为什么这很重要?因为您可以在通用函数中调用 foo(anything) :

并在编译时获得最合适的实现。这是 C++ 以最小的性能损失实现抽象的一种方式。

希望它有助于澄清“部分专业化”的概念。在某种程度上,这就是 C++ 在不需要显式模式匹配语法(比如 Ocaml/F# 中的 match 关键字)的情况下进行类型模式匹配的方式,这有时会妨碍泛型编程。

0 投票
1 回答
819 浏览

c++ - 动态调度的部分模板特化

我正在尝试为在整数值(而不是类型)上模板化的函数编写动态调度程序。虽然我可以编写代码生成器或使用大型宏链来创建调度程序源,但模板化解决方案似乎更优雅。

我已经将我的调度程序简化为一个简单的形式(实际上并没有进行任何调度):

在 gcc 4.1.1 上编译它时,我收到以下错误:

显然,当我尝试创建递归对象时,编译器并没有将其视为实例化新模板的请求。

有什么建议么?

0 投票
7 回答
71074 浏览

c# - 如何在 C# 中进行模板特化

您将如何专攻 C#?

我会提出一个问题。你有一个模板类型,你不知道它是什么。但是您确实知道它是否源自XYZ您要调用的.alternativeFunc(). 一个很好的方法是调用一个专门的函数或类,并在调用的任何派生类型上有其他专门化时normalCall返回。这将如何在 C# 中完成?.normalFunc()XYZ.alternativeFunc()

0 投票
1 回答
1479 浏览

c++ - C++ 部分特化(函数指针)

任何人都可以告诉,下面是否是合法的c++?

// 部分特化

g++ (4.2.4) 错误:函数调用不能出现在常量表达式错误中:模板参数 2 无效

尽管它确实适用于显式专业化

0 投票
2 回答
4632 浏览

c++ - 如何为所有派生类型部分专门化一个类模板?

std::tr1::hash我想为基类和所有派生类部分专门化我无法更改 () 的现有模板。原因是我使用奇怪重复的模板模式来实现多态性,并且哈希函数是在 CRTP 基类中实现的。如果我只想部分专注于 CRTP 基类,那很容易,我可以写:

但是这种特化与实际的派生类不匹配,只有CRTPBase<Derived>. 我想要的是一种为Derived当且仅当它派生自CRTPBase<Derived>. 我的伪代码是

...但这不起作用,因为编译器无法判断enable_if<condition, Derived>::typeDerived. 如果我可以更改std::tr1::hash,我会boost::enable_if按照文档的建议添加另一个要使用的虚拟模板参数enable_if,但这显然不是一个很好的解决方案。有没有办法解决这个问题?我是否必须在每个或我创建的每个unordered_set或我创建的自定义哈希模板上指定一个自定义哈希模板,或者为每个派生类unordered_map完全专门化?hash

0 投票
6 回答
33708 浏览

c++ - 指针作为模板参数?

我有一个容器类,我们称之为

当 T 是指针类型时,我想对这个类做一些不同的事情,例如:

SomeWrapperClass 期望指向事物的类型作为其参数。不幸的是,这种语法不太适用,并且经过一些挖掘,我还没有找到一种让这样的东西工作的好方法。

为什么要这样做?我想在一个非常大的应用程序中改变我们的一些容器在它们专门处理的类型是指针而不是指针时的工作方式 - 理想情况下,我想在不改变约 1,000 个位置的情况下做到这一点在代码中有类似CVector<Object*>vs之CVector<int>类的东西 - 玩部分专业化的游戏似乎是要走的路。

我在这里破解吗?

0 投票
3 回答
3217 浏览

c++ - 模板部分专业化 - 任何现实世界的例子?

我在琢磨partial specialization。虽然我理解这个想法,但我还没有看到这种技术在现实世界中的任何用法。Full specialization在很多地方都使用过,STL所以我对此没有问题。你能告诉我一个真实世界的例子partial specialization吗?如果有例子STL那就更好了!

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 投票
3 回答
378 浏览

c++ - C++ 模板特化没有拿起一个 int

我有以下代码:

进而:

我希望它像 cin >> 那样工作,即它需要将 lua 函数的返回值写入 abc。所以我需要它的地址..但它默认使用默认模板。我究竟做错了什么?肯定有办法做到这一点,因为 cin 正是这样做的。

谢谢!


请注意将 % 更改为 >> 的人:我将其更改回来,因为它是这样的:D 代码调用 Lua 函数 test("test", 5, nil, 2.333) 并将其返回值保存到 abc。% 用于函数的参数,>> 用于返回值。