const指针指向const类型的模板特化

时间:2011-07-19 02:33:22

标签: c++ templates specialization

我正在阅读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编译器(快递: - )

1 个答案:

答案 0 :(得分:5)

结果只是正确的;当你致电isPtr <int const * const>时,会调用你的第三个专业化;您要设置为true

在这种情况下,您可以选择enum而不是bool,因为您有3种状态:

enum TYPE
{
  NOT_POINTER,
  IS_POINTER,
  IS_CONST_POINTER
};

template<class T> struct
isPtr {
 static const TYPE value = NOT_POINTER;
};

template<class U> struct
isPtr<U*> {
 static const TYPE value = IS_POINTER;
};

template<class U> struct
isPtr<U * const> {
 static const TYPE value = IS_CONST_POINTER;
};

这是the demo