C++と色々

主にC++やプログラムに関する記事を投稿します。

C++

範囲for文を自作クラスで使う

C++

範囲for文とは C++11に範囲for文がある。VisualStudioでは2012から使えるようになった。 これは、STLのコンテナや、組み込み配列をfor文で最初から最後までの要素を処理する時に、従来のfor文でいちいち「最初から、終わりまで」という範囲を書かなくて済む…

trivial class

trivial class wikipediaの定義によると、 trivial なクラス・構造体は、以下のように定義される。 コンパイラ定義のデフォルトコンストラクタを持つ。コンストラクタの default 指定の記法を用いてよい (SomeConstructor() = default;)。 コンパイラ定義の…

Decoratorパターンとパラメータ化継承

C++

処理の前後に処理を追加する、ってなんか2つ似てるなと思ったので書いてみて、うんやっぱ似てるってなった。 #include <iostream> #include <string> using namespace std; //デコレータパターン namespace dec { //インターフェイス class writer { public: virtual void wri</string></iostream>…

ADLが謎

C++

こちらのサイトを見て、テンプレート引数の型が宣言された名前空間もADLの範囲にはいるんだー、へー、と思った。 ADLはAgument Dependent Lookupの略で、実引数依存の名前検索と訳されている。要は、ある名前空間に所属している関数・演算子のオーバーロード…

POD型とnon-POD型

2012/3/19追記 この記事の情報はC++03のものです。C++11ではPOD型の定義が異なっています。POD(Plain Old Data)型とはコンストラクタがコンパイラが自動生成したデフォルトコンストラクタしか持たいない型のことです。int型やdouble型などの組み込み型、ま…

純粋仮想関数にも実装を書くことが出来た

C++

Effective C++読んでて初めて知った。今まで知らなかった…orz メモしておこう。 #include <iostream> using std::cout; using std::endl; class Base { public: virtual void Func() = 0; virtual ~Base() {} }; void Base::Func() { cout << "Base Func" << endl; } c</iostream>…

Type Erasure Any編

C++

本の例題がboost::anyの簡易実装だったので、見ながら書いてみたやつ貼り。 #include <iostream> #include <typeinfo> using std::cout; using std::endl; class Any { public: //デフォルトコンストラクタ Any(); //テンプレートコンストラクタ template<class Type> Any(const Type& value)</class></typeinfo></iostream>…

型特性メタ関数(おまけ)

C++

前回の記事の続き。やっぱりboost使ってない版も書いてみた #include <iostream> using std::cout; using std::endl; //基底クラス:ガンダム class Gundam { }; //ガンダム派生クラス:エクシア class Exia : public Gundam { }; //ガンダム派生クラス:ゴッド class </iostream>…

型特性メタ関数

C++

例のテンプレート本(下記の参考文献参照)のSFINAEの章の勉強がてら、あるクラスが特定の基底クラスの派生クラスかどうか判定するプログラム書いてみた。 今回の場合はGundamクラスを派生してるかどうかチェックするプログラム #include <iostream> #include <boost/utility.hpp> using n</boost/utility.hpp></iostream>…

配列のポインタ渡しと参照渡し

C++

C++テンプレートテクニックやっていたらSFINAEの章のサンプルコードに template<class T, size_t N> T* begin(T (&ar)[N]) { return ar; } という記述があった。これはなんだろう?と思ってググったこちらにまとめてあった。</class>

右辺値参照とムーブセマンティクス

C++

こちらを見るとよくわかります本当は怖くないムーブセマンティクス - yohhoyの日記(別館) 本の虫: rvalue reference 完全解説

テンポラリオブジェクトの寿命

C++

自分がテンポラリオブジェクトの寿命と参照、右辺値参照をちゃんと理解していないため色々試してみる。 値を代入する場合、右辺値と関数の戻り値ではデストラクトされるタイミングが違うみたい? #include <iostream> using namespace std; void Section(int n) { cout </iostream>…

静的ポリモーフィズムとタグ・ディスパッチ

C++

折角なのでプログラミングの記事を書いてみようと思う。ポリモーフィズムについて。ざっくり言うと、同名の関数や型が所属しているクラスによって振る舞いを変化させること。 継承によって実現できる。 #include <iostream> class Parent { public: virtual void Show(</iostream>…

ソースコード貼るテスト

C++

約5ヶ月ぶりの更新 ソースコードを貼るテスト<pre>タグで貼ってみる #include #include using namespace std;int main() { function f = [](int i){ return i * i; }; cout return 0; } >||と||<で貼ってみる #include <iostream> #include <functional> using namespace std; int main(</functional></iostream></pre>…