我想在 C++03 中检查模板参数是否属于引用类型。(我们is_reference
在 C++11 和 Boost 中已经有了)。
我利用了 SFINAE 以及我们不能有指向引用的指针这一事实。
这是我的解决方案
#include <iostream>
template<typename T>
class IsReference {
private:
typedef char One;
typedef struct { char a[2]; } Two;
template<typename C> static One test(C*);
template<typename C> static Two test(...);
public:
enum { val = sizeof(IsReference<T>::template test<T>(0)) == 1 };
enum { result = !val };
};
int main()
{
std::cout<< IsReference<int&>::result; // outputs 1
std::cout<< IsReference<int>::result; // outputs 0
}
有什么特别的问题吗?谁能给我一个更好的解决方案?