c – 模板化类函数T:如何判断T是否为指针?

作为 this question的后续:我需要在这样的类函数中做出决定:
template< typename T > bool Class::Fun <T*> ( T& variable ) {...}

T是否是指针.

在上面引用的问题中,答案是使用部分模板专业化.据我所知,这对于类功能是不可能的.这是真的?如果是这样,是否有另一种方法可以找出T是否为指针?

解决方法

无需专门化成员函数.在那个答案中使用了独立的结构.你仍然可以在类成员函数中使用它.
// stand-alone helper struct
template<typename T>
struct is_pointer { static const bool value = false; };    
template<typename T>
struct is_pointer<T*> { static const bool value = true; };

// your class
class Class{
public:
 template<typename T>
 void Fun(T& variable) {
     std::cout << "is it a pointer? " << is_pointer<T>::value << std::endl;
 }
};

另一方面,你可以重载功能

class Class {
public:
 template<typename T>
 void Fun(T& variable) {
     std::cout << "is it not a pointer! " << std::endl;
 }
 template<typename T>
 void Fun(T*& variable) {
     std::cout << "is it a pointer! " << std::endl;
 }
};

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...