#include <stdio.h> template <typename T> struct TraitsHelper { static const bool isPointer = false; }; template <typename T> struct TraitsHelper<T*> { static const bool isPointer = true; }; template<typename T> class Test { public: void Func() { if(TraitsHelper<T>::isPointer) { printf("TypeParm is pointer\n"); } else { printf("TypeParm not pointer\n"); } } }; template <typename T> struct computer_traits { typedef T param_type; }; template <> struct computer_traits<int> { typedef int param_type; }; template <> struct computer_traits<float> { typedef float param_type; }; template<typename T> class Computer { public: typedef T num_type; typedef typename computer_traits<num_type>::param_type traits_type; traits_type Add(traits_type a, traits_type b) { return a+b; } }; int main() { Test<int> intTest; intTest.Func(); Test<int*> pointerTest; pointerTest.Func(); Computer<float> computerFloat; printf("float add = %f\n", computerFloat.Add(3.2, 5.0)); Computer<int> computerInt; printf("float add = %d\n", computerInt.Add(3.2, 5.0)); return 0; }
参考资料
http://www.cnblogs.com/youthlion/archive/2011/12/01/2255618.html
http://blog.csdn.net/my_business/article/details/7891687
http://www.cnblogs.com/pugang/archive/2012/10/17/2727378.html