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

c++ - 实例化后模板的专业化?

我的完整代码太长了,但这里有一个片段可以反映我的问题的本质:

编译此代码时,出现以下错误:

现在我必须为这些类专门化 std::hash (因为标准的 std::hash 定义不包括用户定义的类型)。当我在定义类之前移动这些模板特化时BPCFGParser,我会在尝试各种不同的东西时遇到各种错误,并且在某个地方(http://www.parashift.com/c++-faq-lite/misc-technical-issues .html ) 我读到:

每当您使用一个类作为模板参数时,该类的声明必须是完整的,而不是简单地向前声明。

所以我被困住了。我不能在BPCFGParser定义之后专门化模板,我不能在BPCFGParser定义之前专门化它们,我怎样才能让它工作?


您需要将专业化移动到 BPCFGParser 内部的内部类中。这样做符合这两个要求。

非常感谢您的回答:)

hash类在命名空间中定义std。它不允许我将模板专门用于hash非命名空间范围。甚至以下内容:

不工作。但是,当我用 附上专业时namespace std {},它给出了以下奇怪的错误:

velocityreviews中给出的答案中,有人声称不能在类中定义命名空间。所以我还是卡住了。

0 投票
2 回答
660 浏览

c++ - specialization on const member function pointers

I am trying to specialize some utility code on const member functions, but have problems to get a simple test-case to work.
To simplify the work i am utilizing Boost.FunctionTypes and its components<FunctionType> template - a MPL sequence which should contain the tag const_qualified for const member functions.

But using the test-code below, the specialization on const member functions fails. Does anybody know how to make it work?

The test-code prints out (using VC8 and boost 1.40):

non-const
non-const

Expected output is:

non-const
const

The test-code itself:

0 投票
4 回答
1807 浏览

c++ - 用专门的版本覆盖多个继承的模板化函数

好的,先上示例代码;这是我试图传达我正在尝试做的事情,尽管它没有编译:

所以,我想做的是创建一种包装类来继承,它将自动将派生类连接到各种回调列表;它需要将派生类的特定实例连接到列表,并且我希望“用户”拥有/获取将回调函数作为创建派生类的一部分,如您所见。

看起来这应该可以工作,尽管我可能需要使用不同的语法。如果它不能工作,你有什么建议吗?

0 投票
7 回答
28845 浏览

c++ - 构造函数的 C++ 模板特化

我有一个模板类 A<T, int> 和两个 typedef A<string, 20> 和 A<string, 30>。如何覆盖 A<string, 20> 的构造函数?以下不起作用:

我希望班级 A<std::string,20> 做其他班级没有做的事情。如何在不更改构造函数 A:A(int) 的情况下做到这一点?

0 投票
4 回答
2347 浏览

c++ - 通过模板基类专门化模板

我正在编写一个模板,我试图为其提供一个专门化的类,该类本身就是一个模板类。使用它时,我实际上是用模板类的派生类来实例化它,所以我有这样的东西:

在所有情况下,都会调用第一个版本。所以基本上我的问题是:我哪里出错了,我如何让他调用在调用 UseArg(5) 时返回 arg 的版本,而在调用 UseArg(intArg) 时调用另一个版本?当然欢迎使用其他方法来做这样的事情(不改变 UseArg 的界面)。

作为一个注释,这个例子有点简单化,这意味着在实际代码中我包装了一些更复杂的东西,派生类有一些实际操作。

0 投票
5 回答
520 浏览

c++ - 基于 C++ 特化的重载

我正在尝试创建一个基于其参数的专门化而重载的函数,例如:

...但是我的 MS 编译器给了我这个错误:

错误 C2681:“Mobile *”:dynamic_cast 的表达式类型无效

这两个类都有虚函数。在这种情况下,这是错误的演员阵容吗?我尝试过使用 C 风格的演员表,一切都按预期运行。此外,这种设计是否有任何潜在的陷阱?

0 投票
4 回答
997 浏览

c++ - 编译器如何知道使用模板特化而不是自己的实例化?

考虑以下文件:

Foo.H

Foo.C

主程序

当我编译并运行时,会打印 7。这里发生了什么?模板何时实例化?如果编译器这样做了,编译器怎么知道不实例化自己的 Foo 版本?

0 投票
3 回答
395 浏览

c++ - 帮助类型特征

假设我们有以下模板类

我们不能改变 Wrap。这很重要。

假设有派生自 的类Wrap<T>。例如,

我们也不能改变这些类。以上所有课程都是第 3 方。他们不是我的。

我需要以下编译时间type_traits

我需要什么?

0 投票
1 回答
331 浏览

c++ - 模板专业化

我有以下一组模板:

有人可以解释为什么funcT( x1 );调用函数#3并funcT( &x1 );调用函数#2而不是#4如预期的那样吗?
我已经阅读了这篇文章http://www.gotw.ca/publications/mill17.htm,它说“重载解决方案忽略了专业化并且仅在基本功能模板上运行”。但是根据这个逻辑funcT( x1 );应该调用函数#1,而不是#3。我很困惑。

0 投票
3 回答
258 浏览

c++ - 是否可以专注于某些(不是全部)类模板参数?

是否可以专注于某些(不是全部)类模板参数?

例如: