我可以使用别名模板来专门化类模板吗?
这是一个简单的例子:
class bar {};
template <typename>
class foo {};
template <>
using foo<int> = bar;
这是允许的吗?
Here's a simple example:
class bar {};
template <typename>
class foo {};
template <>
using foo<int> = bar;
Is this allowed?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
参考:14.1 [temp.decls]/p3:
Reference: 14.1 [temp.decls]/p3:
尽管直接专门化别名是不可能的,但这里有一个解决方法。
(我知道这是一篇旧文章,但它是有用的。)
您可以使用 typedef 成员创建一个模板结构,并专门化该结构。
然后,您可以创建引用 typedef 成员的别名。
这使您可以通过专门化
footype
来间接专门化foo
。您甚至可以通过继承自动提供 typedef 的远程类来进一步整理它。然而,有些人可能会觉得这更麻烦。就我个人而言,我喜欢它。
Although direct specialization of the alias is impossible, here is a workaround.
(I know this is an old post but it's a useful one.)
You can create a template struct with a typedef member, and specialize the struct.
You can then create an alias that refers to the typedef member.
This lets you specialize
foo
indirectly by specializingfootype
.You could even tidy it up further by inheriting from a remote class that automatically provides the typedef. However, some may find this more of a hassle. Personally, I like it.
根据标准的§14.7.3/1(也在此其他答案),别名不允许作为显式专业化:(
According to §14.7.3/1 of the standard (also referred to in this other answer), aliases are not allowed as explicit specializations :(