谁能解释一下C++中的模板究竟是怎么会回事

解决方案 »

  1.   

    和函数模板一样
    比如 
    template <type T>
    print( T a)
    {
        cout<<a<<endl;
    };
    因为cout支持任何数据类型的输出,所以可以避免些 print(int) print(long) print(double) 等函数了看看下面的代码//感受C++模板变成
    #include <iostream>template <class T, void (T::*SF)(), void (T::*EF)()>
    class AutoRunner
       {
       public:
          AutoRunner  (T &instance) : m_instance(instance) { (m_instance.*SF)();}
          ~AutoRunner () { (m_instance.*EF)();}
       private:
          T &m_instance;
       };class MyClass
       {
       public:
          MyClass (long value) : m_value(value) {}
          void FirstMethod() { std::cout << " FirstMethod, value is " << m_value << std::endl;}
          void LastMethod () { std::cout << " LastMethod , value is " << m_value << std::endl;}
       private:
          long m_value;
       };typedef AutoRunner<MyClass,&MyClass::FirstMethod,&MyClass::LastMethod> MyClassAuto;int main()
    {
    std::cout << "In beginning of main" << std::endl;MyClass myInstance(1);
    MyClass myInstance2(2);
       {
       MyClassAuto myClassAuto(myInstance);
       std::cout << "  In sub block" << std::endl;
       }
       {
       MyClassAuto myClassAuto(myInstance2);
       std::cout << "  In sub block" << std::endl;
       }std::cout << "At end of main" << std::endl;return 0;
    }