c++ traits

今天逛一些論壇,意外發現到我以前學C++都沒有注意過的技術” C++ traits”
我是看到這篇的解說 http://www.cantrip.org/traits.html 讓我重新知道自己似乎該是時候回到C++的懷抱了:) 之前學了一些,但是自從用了python,就一直很少回去碰C++,如今感覺,該是時候繼續精進C++了。

這個技術目前我覺得只是對於template遇到某些型態對此特別處理這樣,讓泛型的樣板,更加容易使用,更加靈活,看完這篇論述後,心裡有了一點想法,可以使用traits來進行參數的型態判斷,code如下

#include<iostream>  
using namespace std;  

template<typename T>  
class typeof  
{  
 public:  
 const char *type = "unknown";  
};  

template<>  
class typeof<char>  
{  
 public:  
 const char *type = "char";  
};  

template<>  
class typeof<int>  
{  
 public:  
 const char *type = "int";  
};  

template<typename T, typename C=typeof<T>>  
class test  
{  
 public:  
 test()  
 {  
 C obj;  
 cout<<obj.type<<endl;  
 }  
};  

int main()  
{  
 test<int> a;  
 test<char> b;  
 test<bool> c;  
 return 0;  
}  

結果如圖:

pic

結果果然如我所想一樣 :) 當然traits我現在其實也不是完全很瞭啦,畢竟剛看沒多久,另外沒想到C++ 11 竟然支援 class在宣告資料的同時也可以進行initialize,嚇到我了! 看來在我沒用C++的時期,C++改變了很多阿!!! 真的要找時間好好重新認識C++了 :)