标签:
1 // 先定义两种类型 2 struct A{}; 3 struct B{}; 4 5 class Foo 6 { 7 public: 8 // 将类型A绑定到Foo 9 typedef A classtype; 10 11 void foo() 12 { 13 std::cout << __FUNCTION__ << std::endl; 14 } 15 }; 16 17 class Bar 18 { 19 public: 20 // 将类型B绑定到Bar 21 typedef B classtype; 22 23 void bar() 24 { 25 std::cout << __FUNCTION__ << std::endl; 26 } 27 }; 28 29 // 可选,为Foo Bar定义一个traits类 30 template<typename T> 31 class test_traits 32 { 33 public: 34 typedef typename T::classtype classtype; 35 }; 36 37 // 定义一个以Foo Bar为参数的模板函数 38 template<typename T> 39 void func() 40 { 41 // 如果不定义traits类,这里可以直接使用T::classtype 42 do_func(T(), test_traits<T>::classtype()); 43 } 44 45 // func函数真的A类型class的实现 46 template<typename T> 47 void do_func(T &ins, A a) 48 { 49 ins.foo(); 50 } 51 52 // func函数真的B类型class的实现 53 template<typename T> 54 void do_func(T &ins, B a) 55 { 56 ins.bar(); 57 } 58 59 int main(void) 60 { 61 func<Foo>(); 62 func<Bar>(); 63 }
标签:
原文地址:http://www.cnblogs.com/ppplus/p/5373877.html