#include<iostream> #include<string> #include<typeinfo> using namespace std; template <class Name,class Hobby,class Age> //類模板做函數的參數 class Dog{ private: Name m_name; Hobby m_hobby; Age m_age; public: Dog(Name name,Hobby hobby,Age age){ this->m_name=name; this->m_hobby=hobby; this->m_age=age; } void display(){ cout<<"m_name:"<<m_name<<" m_hobby:"<<m_hobby<<" m_age:"<<m_age<<endl; } }; void dis1(){ Dog<string,string,int> dog1("小灰","吃",2); dog1.display(); } // 參數模板化 template<class Name,class Hobby,class Age> void dis2(Dog<Name,Hobby,Age> dog){ // 傳遞類 cout << typeid(Name).name() << endl; cout << typeid(Hobby).name() << endl; cout << typeid(Age).name() << endl; dog.display(); } // 整體類型化 template<class T> void dis3(T &dog){ // 傳遞類 cout << typeid(T).name() << endl; dog.display(); } // 指定傳入類型 void dis4(Dog<string,string,int> dog) { // 傳遞數據類型 dog.display(); } int main(){ Dog<string,string,int> dog2("小黑","睡",1); dis1(); dis2(dog2); dis3(dog2); dis4(dog2); return 0; }
注意:該程序在烏班圖下會出現錯位如圖所示:
解決方法是:在生成的test文件下打開終端執行 ./test | c++filt -t 或在生成的a.out文件夾下執行./a.out | c++filt -t結果如下:
c++ filt使用方法:在終端執行:man C++FILT 命令 會出現: