タグ

Templateとtraitsに関するTacoSのブックマーク (2)

  • traits - while( c++ );

    特性。テンプレート引数に渡された型、定数によって動作を切り替える。 例えば、shared_ptr< T >でvoidを渡すと、 shared_ptr< void > p; operator*()の戻り値の型がvoid&になるのでコンパイルエラーになってしまいます。 template < typename T > class shared_ptr { ... T& operator*()const{ return *ptr; } ... }; Tがvoid以外→T& Tがvoid→void のように、Tの型によって戻り値の型を選択したいわけです。 ちなみにtemplate内の関数の{...}は呼び出し処理を書かない限りコンパイルされないので、voidでreturnを記述していてもコンパイルエラーになりません。 では、さっそくoperator*()の戻り値の型を決定するための特性クラスを作って

    traits - while( c++ );
  • traitsの利用する場面(メモ) - deruiの日記

    最近仕事について色々考えています。今の環境は正直自分のためになっていないので、何とか変える努力というかそういうのが必要だと切実に感じています。 とまぁそういうことは置いておいて、今回はC++の話題です。 boostとかC++0xとか、最新鋭の強力なライブラリを使いこなしている方にとっては、traitsというテクニックは最早当然のものだと思います。 このtraitsというテクニック、特にSTLで非常に多く、そして深く利用されています。 とは言っても、中々理解しずらいテクニックでもあります(少なくとも私にとって)。 なので、事例を示しつつ、なんとか理解できるようになりたいと思います。 まずは以下のようなクラスがあったとします。継承を利用しています。 class Hoge { pubilc: virtual ~Hoge() {} virtual char func() = 0; }; class

    traitsの利用する場面(メモ) - deruiの日記
  • 1