问题标签 [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 回答
3182 浏览

c++ - C++ - 使用该方法的部分特化重载模板化类方法

在堆栈溢出中已经有一些与此类似的问题,但似乎没有什么可以直接回答我的问题。如果我重新发布,我深表歉意。

我想用这些方法的部分模板特化来重载模板化类的一些方法(带有 2 个模板参数)。我一直无法弄清楚正确的语法,并且开始认为这是不可能的。我想我会在这里发帖,看看能不能得到确认。

要遵循的示例代码:

我知道我可以编写整个班级的部分专业,但这有点糟糕。这样的事情可能吗?

(我正在使用 VS2008)编辑:这是编译错误错误 C2244:'Test::Set':无法将函数定义与现有声明匹配

谢谢 :)

0 投票
2 回答
3805 浏览

c++ - 取决于模板参数的内部类

考虑下一个例子:

使用 g++ 编译时(版本 4.3.0)

编译错误是:

我真正想要归档的是根据枚举值具有不同的 Imp 实现(在示例中,我使用 int 而不是枚举,但这应该没关系)。

有人可以解释为什么不允许这样做吗?为什么我会收到第一个错误?(这个:限定名没有在'{'标记之前命名一个类)


关于取决于模板参数的 pimpl 实现,我在这里创建了一个新问题(有更好的例子)

0 投票
1 回答
1390 浏览

c++ - c++ pimpl idiom : 依赖于模板参数的实现

这个问题中,我没有成功询问如何根据模板参数使用不同的 pimpl 实现。

也许这个例子能更好地说明我正在尝试做的事情:

如果我尝试专门化 struct C,它仍然会失败(以上内容无法编译)

那么,有可能做到吗?

我知道这样的解决方法:

但如果可能的话,我想避免它

0 投票
3 回答
2224 浏览

c++ - 部分特化的默认参数

我想在用户端实现什么语法:

我现在有什么实现(不工作,因为不允许部分专业化的默认参数):

我尝试使用具有静态成员的 enable_if 和包装类,但不能将静态成员分配给外部变量;

更新: 实际问题是通用结构和专用结构的名称相等。我不知道如何在不重命名的情况下使其工作:

0 投票
2 回答
8813 浏览

c++ - 具有非类型参数的成员函数的部分特化

我有一个带有类型和非类型模板参数的模板类。我想专门化一个成员函数,我发现,如下例所示,我可以做一个完整的专门化。

但是,这种部分专业化不会编译。

有没有办法实现我正在尝试的任何人都知道?我在 MSVC 2010 中试过这个。

0 投票
2 回答
4211 浏览

c++ - 为什么不允许非类型参数中的部分特化使用嵌套模板参数

我有这个代码

也就是说,对于N能被 整除的数字,5编译器应该使用偏特化。但是编译器不会接受这种部分特化,因为标准要求它拒绝这样的代码,其中部分特化的非类型参数引用参数而不是简单的参数(例如,A<N, N>将是有效的)。但是这样做的原因是什么?

请注意,我可以简单地将我的代码更改为更冗长的示例,并且它是有效的

这很好,因为它不再是非类型参数。但是规范禁止更直接的部分专业化的原因是什么?

0 投票
1 回答
6531 浏览

c++ - 模板参数列表太少的问题

谁能告诉我如何使以下伪代码与GCC4兼容?我想知道它在MSVC下是如何工作的......

0 投票
1 回答
4154 浏览

c++ - 部分特化中未使用的模板参数

我有以下代码:

现在我正在尝试对iterator_traits. 对我来说似乎没问题,但 g++ 4.4.5 抱怨:

这是完整的错误消息:

0 投票
3 回答
788 浏览

c++ - C++ 部分模板专业化的问题

我有类似的情况:

据我所见,这似乎有效。但是,在某些情况下,字符串可以用作 A ,所以我想我只需为这种特殊情况创建一个专业化。

不幸的是,这不符合错误消息:

请注意,另一方面,完整的专业化似乎可以工作(在运行时未经测试但可以编译)

我想,我一定做错了什么。如果您能指出它到底是什么,我将不胜感激。我认为特定专业应该以这种方式工作。

提前非常感谢。

e:将 DEFAULT_A 的名称编辑为 RARELY_USED_A,因为我认为“默认”在某种程度上具有误导性

0 投票
2 回答
592 浏览

c++ - 调用传递给它的对象的成员方法的函子的部分模板特化

我有以下函子及其部分特化

我正在尝试通过以下方式使用它:

我得到了这个,最后一行代码(IDE在调用者处接听):

错误 C2440: '' : 无法从 'void (__thiscall Foo::* )(void) const' 转换为 'Caller<_T>' 1> with 1> [ 1> _T=const Foo 1> ] 1> 没有构造函数可以取源类型,或构造函数重载决议不明确

此代码将在 g++ 环境中工作。(如果我Caller<Foo>(&Foo::Bar)g++ 会抱怨,这是有道理的,因为该函数只会在const对象上调用)。

我尝试了各种方法,包括向函子添加operator()(const _T& obj)/operator()(const _T& obj) const变种,但无济于事。

这将被编译器接受:

我究竟做错了什么?如何使函子模板适用于 Visual C++ 中的 const 成员函数?