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

c++ - 通过基类实现 C++ 模板特化

当我使用不是从 _base* 派生的类调用 foo 的构造函数时,我希望能够让编译器大喊大叫。当前代码仅允许 foo<_base*> 本身。任何简单的解决方案?

主代码:

0 投票
5 回答
11106 浏览

c++ - C++ 模板部分特化 - 只特化一个成员函数

碰到另一个模板问题:

问题:对于对象是指针的情况,我想部分专门化一个容器类(foo),并且我只想专门化删除方法。应该是这样的:

库代码

用户代码

这导致编译器告诉我 myptrs 没有名为 addSome 的方法。为什么 ?

谢谢。


解决方案

基于托尼的回答here完全可编译的东西


用户

0 投票
3 回答
1368 浏览

c++ - 专门针对 stl 样式容器类型的功能

如果我有一个类型T,那么在编译时检查它以查看它是否是 STL 样式容器(对于任意值类型)的有用方法是什么?
(假设:指针、引用等已经被剥离)

起始代码:

现在这工作正常,但如果我想概括容器(即不定义(3)(4),...明确)?

使用SFINAE和类型列表会在一定程度上减少代码,但有更好的方法吗?
或者是否有基于概念的专业习语?
或者我可以以某种方式利用 SFINAE 来选择性地启用所需的专业化吗?

作为旁注,我不能使用迭代器 - 我正在尝试基于接收Ts 作为参数的函数进行专门化。


根据MSalters 的回答

(需要变量参数列表来使第一个f成为最不喜欢的版本来解决歧义错误)

0 投票
3 回答
1371 浏览

c++ - 我可以对(非成员)函数使用部分模板特化吗?

我正在尝试在(非成员)函数上使用部分模板专业化,并且我在语法上绊倒了。我在 StackOverflow 中搜索了其他部分模板专业化问题,但这些问题涉及类或成员函数模板的部分专业化。

作为一个起点,我有:

我可以对 ConvertPixel 做一个完整的专业化来制作一个 RGBA 到灰度的转换函数,如下所示:

可以想象,我将拥有更多提供红色、绿色和蓝色的像素类型,但可能采用不同的格式,所以我真正想做的是通过指定GrayscaleforOutType并仍然允许各种InTypes 来进行部分专业化。我尝试了各种这样的方法:

但是(Microsoft VS 2008 C++)编译器拒绝它。

我正在尝试的可能吗?如果是这样,正确的语法是什么?

0 投票
4 回答
1173 浏览

c++ - 专门化成员模板而不专门化其父模板

我有一个嵌套在另一个模板中的类模板。部分特化它很容易:我只是template< … >在其父块中声明另一个块。

但是,我需要另一个偏特化来指定其所有本地模板参数。这使它成为一个明确的专业化。无论出于何种原因,显式特化必须在命名空间范围内。要在其父类之外声明它,必须指定父类,这需要一个非空的模板参数列表。这意味着部分专业化。部分专业化我正在做的事情,它应该在任意外部范围内工作。但是 GCC 和 Comeau 都无法使用部分专业化形式参数来识别父提名中的模板参数。

(我把我所有的非工作代码都留在了;适当地评论它以试图理解。)

0 投票
2 回答
4883 浏览

c++ - 自由函数的部分模板特化——最佳实践

正如大多数 C++ 程序员应该知道的那样,自由函数的部分模板特化是不允许的。例如,以下是非法的 C++:

然而,类/结构的部分模板特化允许的,并且可以被用来模仿自由函数的部分模板特化的功能。例如,上一个示例中的目标可以通过使用来实现:

它更笨重,更不简洁,但它完成了工作——就用户mul而言,他们获得了所需的部分专业化。


我的问题是:在编写模板化的自由函数(旨在供其他人使用)时,您是否应该自动将实现委托给类的静态方法函数,以便您的库的用户可以随意实现部分特化,或者做您只是以正常方式编写模板化函数,并且忍受人们无法专门化它们的事实吗?

0 投票
1 回答
1601 浏览

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 中遇到的错误。我想要么我无法为专业化找出正确的语法,要么不可能这样做。

0 投票
2 回答
2912 浏览

c++ - 获取没有显式特征的整数模板参数的有符号/无符号变体

我希望定义一个模板类,其模板参数将始终为整数类型。该类将包含两个成员,一个是 type T,另一个是 type 的无符号变体T——即 if T == int, then T_Unsigned == unsigned int。我的第一直觉是这样做:

但它不起作用。然后我考虑使用部分模板专业化,如下所示:

只要您UnsignedType每种整数类型进行部分专业化,这就是有效的。这是一些额外的复制粘贴工作(斜线明智地使用宏),但可以使用。

但是,我现在很好奇 - 是否有另一种方法可以确定整数类型的有符号性和/或使用类型的无符号变体,而不必手动定义每个类型的 Traits 类?或者这是唯一的方法吗?

0 投票
2 回答
237 浏览

c++ - 如何模板化部分模板专业化?

我什至不确定给这个问题取什么标题;希望代码将展示我正在尝试做的事情:

Alpha<A>当 A 是任何类型时,我想写一个专业化Bravo<B>,但编译器说

'>' 标记
封闭类模板之前的无效显式特化未显式特化

(参考// Line A。)什么是正确的语法来做我想做的事?

0 投票
1 回答
311 浏览

c++ - 带有参考模板参数的部分特化在 VS2005 中编译失败

我的代码归结为以下内容:

这在 GCC 下编译成功,但是,在 VS2005 下,我得到:

但是,如果我更改const Foo<T>& Iconst Foo<T>* I(通过I指针而不是通过引用传递),并定义FloatFooBar为:

GCC 和 VS2005 都很高兴。

这是怎么回事?这是VS2005处理与GCC不同的某种微妙的模板替换失败,还是编译器错误?

(最奇怪的是:我以为我今天早上早些时候在 VS2005 中运行了上面的代码。但那是在我早上喝咖啡之前。我现在不完全确定我没有处于某种咖啡因渴望引起的谵妄中。 .)