2013年7月22日 星期一

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;
}

結果如圖:

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

0 意見:

張貼留言