是否可以使用成员枚举来专门化模板?
struct Bar {
enum { Special = 4 };
};
template<class T, int K> struct Foo {};
template<class T> struct Foo<T,T::Special> {};
用法:
Foo<Bar> aa;
使用 gcc 4.1.2 编译失败 它抱怨使用 T::Special
来对 Foo 进行部分专业化。如果 Special
是一个类,那么解决方案就是在它前面加上一个类型名。对于枚举(或整数)有等价的东西吗?
struct Bar {
enum { Special = 4 };
};
template<class T, int K> struct Foo {};
template<class T> struct Foo<T,T::Special> {};
Usage:
Foo<Bar> aa;
fails to compile using gcc 4.1.2
It complains about the usage of T::Special
for partial specilization of Foo. If Special
was a class the solution would be to a typename in front of it. Is there something equivalent to it for enums (or integers)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
由于 C++ 不允许这样做,正如 Prasoon 所解释的那样,因此替代解决方案是使用
EnumToType
类模板,示例代码位于 ideone : http:// www.ideone.com/JPvZy
或者,您可以像这样简单地专业化(如果它解决了您的问题),
Since that is not allowed by C++ as explained by Prasoon, so an alternative solution would be to use
EnumToType
class template,Sample code at ideone : http://www.ideone.com/JPvZy
Or, you can simply specialize like this (if it solves your problem),
非类型模板参数的类型不能依赖于部分特化的模板参数。
ISO C++03 14.5.4/9 说
所以这样的东西是非法的
template结构 Foo{};
因为T::Special
依赖于T
的用法也是非法的。您已提供一个模板参数,但需要提供两个。
The type of a non-type template argument cannot depend on a template parameter of a partial specialization.
ISO C++03 14.5.4/9 says
So something like this is illegal
template<class T> struct Foo<T,T::Special> {};
becauseT::Special
depends onT
The usage is also illegal. You have provided one template argument but you need to provide two.