问题标签 [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.
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中给出的答案中,有人声称不能在类中定义命名空间。所以我还是卡住了。
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:
c++ - 用专门的版本覆盖多个继承的模板化函数
好的,先上示例代码;这是我试图传达我正在尝试做的事情,尽管它没有编译:
所以,我想做的是创建一种包装类来继承,它将自动将派生类连接到各种回调列表;它需要将派生类的特定实例连接到列表,并且我希望“用户”拥有/获取将回调函数作为创建派生类的一部分,如您所见。
看起来这应该可以工作,尽管我可能需要使用不同的语法。如果它不能工作,你有什么建议吗?
c++ - 构造函数的 C++ 模板特化
我有一个模板类 A<T, int> 和两个 typedef A<string, 20> 和 A<string, 30>。如何覆盖 A<string, 20> 的构造函数?以下不起作用:
我希望班级 A<std::string,20> 做其他班级没有做的事情。如何在不更改构造函数 A:A(int) 的情况下做到这一点?
c++ - 通过模板基类专门化模板
我正在编写一个模板,我试图为其提供一个专门化的类,该类本身就是一个模板类。使用它时,我实际上是用模板类的派生类来实例化它,所以我有这样的东西:
在所有情况下,都会调用第一个版本。所以基本上我的问题是:我哪里出错了,我如何让他调用在调用 UseArg(5) 时返回 arg 的版本,而在调用 UseArg(intArg) 时调用另一个版本?当然欢迎使用其他方法来做这样的事情(不改变 UseArg 的界面)。
作为一个注释,这个例子有点简单化,这意味着在实际代码中我包装了一些更复杂的东西,派生类有一些实际操作。
c++ - 基于 C++ 特化的重载
我正在尝试创建一个基于其参数的专门化而重载的函数,例如:
...但是我的 MS 编译器给了我这个错误:
错误 C2681:“Mobile *”:dynamic_cast 的表达式类型无效
这两个类都有虚函数。在这种情况下,这是错误的演员阵容吗?我尝试过使用 C 风格的演员表,一切都按预期运行。此外,这种设计是否有任何潜在的陷阱?
c++ - 编译器如何知道使用模板特化而不是自己的实例化?
考虑以下文件:
Foo.H
Foo.C
主程序
当我编译并运行时,会打印 7。这里发生了什么?模板何时实例化?如果编译器这样做了,编译器怎么知道不实例化自己的 Foo 版本?
c++ - 帮助类型特征
假设我们有以下模板类
我们不能改变 Wrap
。这很重要。
假设有派生自 的类Wrap<T>
。例如,
我们也不能改变这些类。以上所有课程都是第 3 方。他们不是我的。
我需要以下编译时间type_traits
:
我需要什么?
c++ - 模板专业化
我有以下一组模板:
有人可以解释为什么funcT( x1 );
调用函数#3并funcT( &x1 );
调用函数#2而不是#4如预期的那样吗?
我已经阅读了这篇文章http://www.gotw.ca/publications/mill17.htm,它说“重载解决方案忽略了专业化并且仅在基本功能模板上运行”。但是根据这个逻辑funcT( x1 );
应该调用函数#1,而不是#3。我很困惑。
c++ - 是否可以专注于某些(不是全部)类模板参数?
是否可以专注于某些(不是全部)类模板参数?
例如: