ページ

2014年7月6日日曜日

C++と戯れる 1 - テンプレート -

最近購入したC++テンプレート本を読んで勉強



まあ、マニアックな話が満載です(笑)
boostなんかの仕組みを知りたい人なんかもオススメです。

■ std::tuple

tuple とは ・・・
   読み方はタプル、複数個の型をまとめて扱う事ができるもの
   C++11からの導入

・サンプルプログラム
    std::tuple<int, std::string> get_tuple()
    {
         return make_tuple(1, “test”);
    }

    void testTuple()
    {
         auto a = get_tuple();
         std::cout << std::get<0>(a) << “:” << std::get<1>(a).c_str() << std::endl;
    }

↑のサンプルではget_tuple()メソッドの戻り値がintとstd::stringのタプル型を返している
メソッドを呼ぶ側としてはtuple型で戻り値を取得してもいいが、便利なauto型を使用


■ <<演算子のオーバーロード

クラスや構造体で << 演算子をオーバーロードする場合、プライベートなメンバを
出力する場合等は、friend関数として定義する。

・サンプルプログラム
template <class T, class Allocator = int>
struct HOGE {
 T a;
 Allocator b;

 friend ostream& operator << (ostream &o, const HOGE &h)
 {
  o << h.a << ":" << h.b;
  return o;
 }
};


void testChapter2_2()
{
 HOGE<long> a;
 a.a = 0L;
 a.b = 3;
 std::cout << a << std::endl;
}

↑のサンプルの出力結果としては「0:3」になる
ちょっと分かりづらいがHOGE構造体はTとAllocatorのテンプレート型をメンバに
持っており、Allocatorのデフォルトの型がintなので、HOGE<long>で
Tはlong型、Allocatorはint型となる。

friend stream& operator << で引数のHOGE& hのメンバaとbを出力している。


0 件のコメント:

コメントを投稿