问题标签 [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++ - 专用模板类的静态成员初始化
它在 GCC 4.1 下编译,但不链接:
如果可能的话,我宁愿保持初始化专门化,因为数组包含一些特定于该类型的数据。
c++ - 一个模板专门化多个类
假设我们有一个模板函数“foo”:
我可以对某些特定类型进行专业化,例如
如果我想对所有内置数字类型(int、float、double 等)使用相同的特化,我会多次编写这些行。我知道 body 可以被扔到另一个函数中,只需在每个专业化的 body 中调用它,但是如果我可以避免为每种类型写这个“void foo(...”)会更好。有没有有没有可能告诉编译器我想对所有这些类型使用这个专业化?
c++ - c++ 模板:成员特化的问题
我正在尝试创建一个模板“AutoClass”,该模板创建一个具有任意成员集的任意类,例如:
到目前为止,我有一个带有工作“集合”成员的 AutoClass:
我开始在实施相应的“get”时遇到问题。这种方法不能编译:
此外,似乎我需要为<nothing, nothing, nothing, nothing, nothing, nothing>
专业化实施 get 。关于如何解决这个问题的任何想法?
c++ - 在 C++0x 中专门针对 lambda 模板
我编写了一个特征类,可以让我提取有关 C++0x 中函数或函数对象的参数和类型的信息(使用 gcc 4.5.0 测试)。一般情况下处理函数对象:
然后我对全局范围内的普通函数有一个专门化:
这很好用,我可以将一个函数传递给模板或函数对象,它可以正常工作:
如果foo
我不想将函数或函数对象传递给 ,而是传递一个 lambda 表达式怎么办?
这里的问题是这两个专业化都不function_traits<>
适用。C++0x 草案说表达式的类型是“唯一的、未命名的、非联合类类型”。拆解调用typeid(...).name()
表达式的结果给了我似乎是 gcc 对 lambda 的内部命名约定main::{lambda(int)#1}
,而不是在语法上表示 C++ 类型名的东西。
简而言之,我可以在这里放入模板中的任何内容:
这将允许这个特征类接受一个 lambda 表达式?
c++ - 有没有办法使用模板专业化将 new 与 new [] 分开?
我有一个自动指针类,在构造函数中我传入了一个指针。我希望能够在构造函数中将 new 与 new[] 分开,以便我可以在析构函数中正确调用 delete 或 delete[]。这可以通过模板专业化来完成吗?我不想在构造函数中传入一个布尔值。
c++ - 这是否完美地模仿了功能模板专业化?
由于以下代码中的函数模板是类模板的成员,因此如果不专门化封闭类就无法专门化它。
但是,如果编译器的全部优化已启用(假设 Visual Studio 2010),以下代码中的 if-else-statement 会得到优化吗?如果确实如此,这是否意味着出于所有实际目的,这是一个没有任何性能成本的函数模板专业化?
c++ - 特化类模板构造函数
我在搞乱模板专业化,并且在尝试根据使用的策略专门化构造函数时遇到了问题。这是我试图开始工作的代码。
...\main.cpp(29): error C3860: template argument list following class template name must list parameters in order to used in template parameter list ...\main.cpp(29): error C2976: 'Die' :模板参数太少 ...\main.cpp(31):错误 C3860:类模板名称后面的模板参数列表必须按照模板参数列表中使用的顺序列出参数
这些是我在 Microsoft Visual Studio 2010 中遇到的错误。我想要么我无法为专业化找出正确的语法,要么不可能这样做。
c++ - std::basic_string 完全专业化(g++ 冲突)
我正在尝试std::basic_string< char, char_traits<char>, allocator<char> >
通过标题定义一个完整的专业化,它是 typedef'd (在 g++ 中)<string>
。
问题是,如果我<string>
首先包含,g++ 将 typedef 视为实例化basic_string
并给我错误。如果我先做我的专业,那么我没有问题。
包含后我应该能够定义我的专业<string>
。我必须做什么才能做到这一点?
我的代码:
上面的代码工作正常。但是,如果我取消注释第一#include <string>
行,我会收到以下编译器错误:
第 52 行/usr/include/c++/4.4/bits/stringfwd.h
:
据我所知,这只是模板的前向声明,而不是 g++ 声称的实例化。
第 56 行/usr/include/c++/4.4/bits/stringfwd.h
:
据我所知,这只是一个 typedef,也不是实例化。
那么为什么这些行与我的代码冲突?除了确保我的代码始终包含在之前,我还能做些什么来解决这个问题<string>
?
inheritance - 是否有一种方法可以在 UML 中指定参与者的专业化泛化(继承)?
我刚开始使用 UML 并遇到了以下问题:
一些演员显然是自然实体的特殊版本。例如,我有管理员和用户角色,它们显然只是用户的不同角色,授权者和调度程序是服务(并将以这种方式实现)。我应该在建模参与者和用例时忽略这些事实还是以某种方式指定它?我想我可以很好地利用这样的规范来促进代码生成。