なまもの備忘録

気になったことをつらつらと書いていきます

C++

テンプレートフレンド演算子の宣言方法

テンプレートクラスにフレンド演算子を定義しようとした時に嵌ったのでメモ。 新たに作ったテンプレートクラスに対する演算子を定義しようとする時、それらをフレンド演算子にすることはままあると思う。管理人もそのような場面に出くわし、素直に定義しよう…

仮引数が同じメンバ関数のオーバーロード

std::arrayの中身を読んでいたところ、以下のようなコードに出くわした。 template<typename _Tp, std::size_t _Nm> struct array { ... iterator begin() noexcept { return iterator(data()); } const_iterator begin() const noexcept { return const_iterator(data()); } } 仮引数と名前</typename>…

aggregate typeの初期化子リストによる初期化

C++11から統一初期化記法が登場した。それによって、配列やstd::arrayなどを初期化子リストで初期化することができるようになった。 具体的に言うと、下のようなことができるようになった。 #include<array> ... int arr[3]{1, 2, 3}; std::array<int, 3> arr2{1,2,3}; ... </int,></array>…

STL std::arrayの実装を読む(読めていない)

訳あって2次元コンテナの実装を目論んだのだがどのようにすればいいかよくわからない。 何か参考になるようなソースコードを探すことにしたのだが、そこで、STLのarrayは配列を単にラップしただけ、という話を思い出した。 これは参考にするにちょうど良いの…

typedefで配列型に名前をつける

C++

typedefは基本的に以下のように使う。 typedef int size;//以降size型をint型として使うことができるようになるただ、配列をtypedefしたい場合は表記法が直感に反したものになる 例えばint型の配列をsizesと定義したい時は以下のように表記する。 typedef in…

C++のconst指定子とポインタのややこしい話

C++

C++でよく変更する予定のない変数の型の前にconstを付けるが、あれは唯の目印のようなものではなく、const ホニャララという新しい型を宣言している感覚に近いっぽい。 このconstの仕様はC言語時代からの負の遺産で大分ややこしいものになっているため、ここ…

(C++)大きさ不明の2次元配列データを2次元vectorに読み込む方法

C++

3/22 17:10大きさの分からない2次元配列データを2次元vectorに格納する方法がいくら調べても見つからなかったので、分からないなりに調べつつコードを作成してみた。 下記のコードであれば、データが数値のcsvファイルならなんでも読み込めるはず。2017/10/2…

C++でのファイルの入出力

C++

2/25 17:28 C++でのファイルからの入力、ファイルへの出力の仕様がよく分からなくてもやもやする。検索をしてもどうもC仕様のやり方とC++仕様のやり方があるようで、この二つが混ざって出てくる上に痒いところに手が届かないサイトしかない。あまりにイライ…

OpenCVの環境構築を頑張ってみた(Mac)

TLでOpenCVの環境構築に苦戦している人がいたので、それに刺激されて僕の方も一度放棄したOpenCVの環境構築に再挑戦してみることにした。 とりあえず参考になりそうなサイトとして http://stackoverflow.com/questions/24985713/opencv-undefined-symbols-fo…