今天逛一些論壇,意外發現到我以前學C++都沒有注意過的技術" C++ traits"
我是看到這篇的解說 http://www.cantrip.org/traits.html 讓我重新知道自己似乎該是時候回到C++的懷抱了:) 之前學了一些,但是自從用了python,就一直很少回去碰C++,如今感覺,該是時候繼續精進C++了。
這個技術目前我覺得只是對於template遇到某些型態對此特別處理這樣,讓泛型的樣板,更加容易使用,更加靈活,看完這篇論述後,心裡有了一點想法,可以使用traits來進行參數的型態判斷,code如下
結果如圖:
結果果然如我所想一樣 :) 當然traits我現在其實也不是完全很瞭啦,畢竟剛看沒多久,另外沒想到C++ 11 竟然支援 class在宣告資料的同時也可以進行initialize,嚇到我了! 看來在我沒用C++的時期,C++改變了很多阿!!! 真的要找時間好好重新認識C++了 :)
我是看到這篇的解說 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; }
結果如圖:
結果果然如我所想一樣 :) 當然traits我現在其實也不是完全很瞭啦,畢竟剛看沒多久,另外沒想到C++ 11 竟然支援 class在宣告資料的同時也可以進行initialize,嚇到我了! 看來在我沒用C++的時期,C++改變了很多阿!!! 真的要找時間好好重新認識C++了 :)
c++ traits