问题标签 [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.
c++ - C++ - 使用该方法的部分特化重载模板化类方法
在堆栈溢出中已经有一些与此类似的问题,但似乎没有什么可以直接回答我的问题。如果我重新发布,我深表歉意。
我想用这些方法的部分模板特化来重载模板化类的一些方法(带有 2 个模板参数)。我一直无法弄清楚正确的语法,并且开始认为这是不可能的。我想我会在这里发帖,看看能不能得到确认。
要遵循的示例代码:
我知道我可以编写整个班级的部分专业,但这有点糟糕。这样的事情可能吗?
(我正在使用 VS2008)编辑:这是编译错误错误 C2244:'Test::Set':无法将函数定义与现有声明匹配
谢谢 :)
c++ - 取决于模板参数的内部类
考虑下一个例子:
使用 g++ 编译时(版本 4.3.0)
编译错误是:
我真正想要归档的是根据枚举值具有不同的 Imp 实现(在示例中,我使用 int 而不是枚举,但这应该没关系)。
有人可以解释为什么不允许这样做吗?为什么我会收到第一个错误?(这个:限定名没有在'{'标记之前命名一个类)
关于取决于模板参数的 pimpl 实现,我在这里创建了一个新问题(有更好的例子)
c++ - c++ pimpl idiom : 依赖于模板参数的实现
在这个问题中,我没有成功询问如何根据模板参数使用不同的 pimpl 实现。
也许这个例子能更好地说明我正在尝试做的事情:
如果我尝试专门化 struct C,它仍然会失败(以上内容无法编译)
那么,有可能做到吗?
我知道这样的解决方法:
但如果可能的话,我想避免它
c++ - 部分特化的默认参数
我想在用户端实现什么语法:
我现在有什么实现(不工作,因为不允许部分专业化的默认参数):
我尝试使用具有静态成员的 enable_if 和包装类,但不能将静态成员分配给外部变量;
更新: 实际问题是通用结构和专用结构的名称相等。我不知道如何在不重命名的情况下使其工作:
c++ - 具有非类型参数的成员函数的部分特化
我有一个带有类型和非类型模板参数的模板类。我想专门化一个成员函数,我发现,如下例所示,我可以做一个完整的专门化。
但是,这种部分专业化不会编译。
有没有办法实现我正在尝试的任何人都知道?我在 MSVC 2010 中试过这个。
c++ - 为什么不允许非类型参数中的部分特化使用嵌套模板参数
我有这个代码
也就是说,对于N
能被 整除的数字,5
编译器应该使用偏特化。但是编译器不会接受这种部分特化,因为标准要求它拒绝这样的代码,其中部分特化的非类型参数引用参数而不是简单的参数(例如,A<N, N>
将是有效的)。但是这样做的原因是什么?
请注意,我可以简单地将我的代码更改为更冗长的示例,并且它是有效的
这很好,因为它不再是非类型参数。但是规范禁止更直接的部分专业化的原因是什么?
c++ - 模板参数列表太少的问题
谁能告诉我如何使以下伪代码与GCC4兼容?我想知道它在MSVC下是如何工作的......
c++ - 部分特化中未使用的模板参数
我有以下代码:
现在我正在尝试对iterator_traits
. 对我来说似乎没问题,但 g++ 4.4.5 抱怨:
这是完整的错误消息:
c++ - C++ 部分模板专业化的问题
我有类似的情况:
据我所见,这似乎有效。但是,在某些情况下,字符串可以用作 A ,所以我想我只需为这种特殊情况创建一个专业化。
不幸的是,这不符合错误消息:
请注意,另一方面,完整的专业化似乎可以工作(在运行时未经测试但可以编译)
我想,我一定做错了什么。如果您能指出它到底是什么,我将不胜感激。我认为特定专业应该以这种方式工作。
提前非常感谢。
e:将 DEFAULT_A 的名称编辑为 RARELY_USED_A,因为我认为“默认”在某种程度上具有误导性
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 成员函数?