最近購入した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 件のコメント:
コメントを投稿