今天逛一些論壇,意外發現到我以前學C++都沒有注意過的技術” C++ traits”
我是看到這篇的解說 http://www.cantrip.org/traits.html 讓我重新知道自己似乎該是時候回到C++的懷抱了:) 之前學了一些,但是自從用了python,就一直很少回去碰C++,如今感覺,該是時候繼續精進C++了。
這個技術目前我覺得只是對於template遇到某些型態對此特別處理這樣,讓泛型的樣板,更加容易使用,更加靈活,看完這篇論述後,心裡有了一點想法,可以使用traits來進行參數的型態判斷,code如下
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++了 :)