指向 const 类型的 const 指针的模板特化
我正在阅读 http:// /bartoszmilewski.wordpress.com/2009/10/21/what-does-haskell-have-to-do-with-c/ 并遇到此代码来检查是否类型是否是指针:
template<class T> struct
isPtr {
static const bool value = false;
};
template<class U> struct
isPtr<U*> {
static const bool value = true;
};
template<class U> struct
isPtr<U * const> {
static const bool value = true;
};
如何专门化通用模板来处理指向 const 类型的 const 指针的情况? 如果我这样做:
std::cout << isPtr <int const * const>::value << '\n';
当我期待错误时,我会得到正确的结果。 有人可以解释一下吗?
编辑:使用 VC++ 2010 编译器(表达:-)
I was reading http://bartoszmilewski.wordpress.com/2009/10/21/what-does-haskell-have-to-do-with-c/ and came across this code to check if a type is a pointer or not:
template<class T> struct
isPtr {
static const bool value = false;
};
template<class U> struct
isPtr<U*> {
static const bool value = true;
};
template<class U> struct
isPtr<U * const> {
static const bool value = true;
};
How do i specialize the general template to handle case for const pointer to a const type?
If i do this:
std::cout << isPtr <int const * const>::value << '\n';
i get a true when i am expecting false.
Can someone explain?
EDIT: using VC++ 2010 compiler (express :-)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
结果只是正确;当您调用 isPtr时,将调用您的第三个专业化;您将其设置为
true
。在这种情况下,您可以选择
enum
而不是bool
,因为您有 3 种状态:这里是 演示。
The result is coming correct only; your third specialization is invoked when you call
isPtr <int const * const>
; which you are setting totrue
.You can choose
enum
overbool
in this case as you have 3 states:Here is the demo.