C++と色々

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

バブルソート書いてみた

普通のと、デバッグ表示用の2種類 #include <algorithm> #include <iterator> #include <functional> #include <utility> template <typename Iterator> void bubble_sort(Iterator first, Iterator last) { bubble_sort(first, last, std::less<>{}); } template <typename Iterator, typename Compare> void bubble_sort(Iterator first,…</typename></typename></utility></functional></iterator></algorithm>

型名と変数名

C++ではユーザ定義型と同名の変数を作ることが出来ます。型名か変数名か曖昧な文では変数と解釈されます。型名を表したい時は型名の前にclassもしくはstructをつけます。 class hoge {}; int main() { hoge hoge; // 型名と同じ名前の変数を作って良い hoge;…

テンプレートテンプレートパラメータにtypenameキーワードを使えるようにする

C++

N4051 Allow typename in a template template parameter 今のC++ではテンプレートテンプレートパラメータにはclassキーワードしか使えません。 template <template <typename> class T> // OK struct A; template <template <typename> typename T> // NG struct B; この制限を無くして、typenameキ</template></template>…

C++の関数のオーバーロード解決について

C++

問題です。以下のコードで、(a)、(b)、(c)、どの関数が呼ばれるでしょうか。 #include <iostream> using std::cout; // (a) template <typename T> void f(T) { cout << "f(T)"; } // (b) template <> void f(int*) { cout << "f(int*)"; } // (c) template <typename T> void f(T*) { cout << </typename></typename></iostream>…

ダークソウル2全クリしました

5月15日にダークソウル2を全クリしました。3月20日から始めたので2ヶ月無いくらいですね。その時のステータスを記録しようと思います。 この記事では装備名のみ、ネタバレを含みます。それ以外のネタバレはありません。

<boost/detail/lightweight_test.hpp>

概要 ちょっとしたテストが書きたい、でもちゃんとしたテスティングフレームワークを導入するのは重い…そんな時にboostのlightweight_testが便利です。 これはboost/detail/lightweight_test.hppにあります。detailディレクトリ以下なのでちょっと分かりにく…

ジェネリックラムダ

C++

C++14で実装されるジェネリックラムダの引数の型autoは、テンプレート引数と同じ型推論が行われます。なので引数の右辺値参照が左辺値参照にもなります。 #include <iostream> #include <type_traits> #include <utility> int main() { auto lam = [](auto&& val) { using type = decltype(va</utility></type_traits></iostream>…

依存性の注入

依存性の注入(Dependency injection)が実際に役立った場面があったので、メモします。 私はJavaでcsvファイルを読み込むクラスを書いていました。csvファイルということで、コンストラクタでファイル名を受け取るように実装しました。 package csv; import j…

社会人になりました

4/1に入社式を行いました。 これからどうなるんだろう。

今年は

今年は今まで一番ブログ書きました。 初めて勉強会に参加もしました。 免許も取りました。 インターンも経験しました。 いろんな経験を積むことが出来ました。 来年も色んなことを経験していきたいです。 あとゲーム作りたいなぁ… 良いお年を

using宣言とusingディレクティブ

C++

using宣言は既に宣言済みの名前だけを現在のスコープに取り込みます。 #include <iostream> namespace A { void f(double) { std::cout << "f(double)" << std::endl; } } using A::f; namespace A { void f(int) { std::cout << "f(int)" << std::endl; } } int main(</iostream>…

ラムダ式で再帰関数

C++

先日の記事にて、C++にラムダ式の再帰関数が欲しいと書いたのですが、調べたらstackoverflowにラムダ式での再帰関数を実現しようとしているコードがありました。 #include <functional> #include <iostream> int main() { std::function<int (int)> fact; fact = [&fact](int n){ return n == </int></iostream></functional>…

C++に欲しい機能

C++

C#書いていて、これC++にも欲しいなぁ、と思ったり、普通にこういう機能欲しいと思ったものです。 ネストした名前空間 今のC++ではこう書かないといけません。 namespace hoge { namespace foo { ... } } をこう書けたら良いなぁ、と思いました。 namespace …

私の趣味プログラミングについて

※12/19 追記 記事書いて数日公開したら、言いたい欲がスッキリので消します。

今年読んだ技術書

今年読んだ技術書をまとめようと思います。年末なので振り返ってみようと思います。 今年はよく電車に乗ったりして暇を潰す機会が多かったのと、意識的に積み本を消化しようとしていたのでたくさん読みました。1回読んだだけでは全て理解しきれないので、何…

マルチメソッド4 対数時間編

C++

マルチメソッド3 力まかせ改良編の続きです。 basic_dispatcher flat_mapを使う RTTI(実行時型情報)と、type_index(typeinfoを比較できるようにラップした型)の2つがあることにより、全ての型に対して(もちろん動的な型も含みます)、順序関係を持つことが出…

find関数で見るC++の変化

C++

STLアルゴリズムはそのアルゴリズムを適用する範囲の先頭と末尾のイテレータのペアを引数に取ります。実際には範囲全体にアルゴリズムを適用させるケースが多く、イテレータのペアを書くのが冗長に感じることがあります。そこでBoost.Rangeには、範囲を引数…

boost::serializationでboost::shared_ptrをシリアライズする

boost::shared_ptrをシリアライズする際にハマったのでメモしておきます。 boost::shared_ptrのトラッキングレベルはboost::shared_ptrの型Tのトラッキングレベルに依存しています。そして、その型Tのトラッキングレベルはboost::serialization::track_never…

boost::serializationでデフォルトコンストラクタのないクラスをシリアライズ化する

デフォルトコンストラクタを持たないクラスをシリアライズする。 save_construct_dataを使う、とかいった情報は出てくるのに、肝心のアーカイブ化するサンプルコードが探した限りあんまり無いので、サンプル張っておきます。ここに知りたいことが書いてあり…

MinGWでboostをビルドするとコンパイルエラーになる

MinGWのgccでboostを使いたかったので、こちらのサイトを参考に bootstrap.bat gcc を実行しました。すると Building Boost.Build engine builtins.c: In function 'builtin_readlink': builtins.c:1879:39: error: 'FSCTL_GET_REPARSE_POINT' undeclared (f…

Visual C++ Complier Nov 2013 CTPのconstexprのコンパイル時再帰深度

Visual C++ Complier Nov 2013 CTPにて部分的に実装されたconstexprですが、constexpr関数のコンパイル時再帰深度について調べてみました。 constexpr int func(int n) { return n == 0 ? 0 : func(n - 1); } int main() { static_assert(func(512) == 0, ""…

Visual C++ Compiler November 2013 CTPがやってきた!

ソース http://blogs.msdn.com/b/vcblog/archive/2013/11/18/announcing-the-visual-c-compiler-november-2013-ctp.aspx ついに…!ついに…!きた…!Visual C++ 2013 CTPです! なんと、Visual C++で、constexprが使えます!!!(コンストラクタ除く) コンパ…

歌舞伎座.tech#2に参加してきた

C++

補欠参加だったので、前日までに枠に入れてラッキーでした。 普段ブログやtwitterで一方的によく知っている人たちに生で会えるということも目的の一つに参加してきました。 C++11 : variadic template のご紹介 発表者 επιστημηさん 資料 http://www.slidesh…

Visual C++ 12.0で boost iterator concepts がコンパイルエラーになる

C++

以下のコードがVisual C++ 12.0でコンパイルエラーになります。Boostのバージョンは1.55です。 #include <boost/iterator/iterator_concepts.hpp> int main() { } 出力 http://melpon.org/wandbox/permlink/oJdAALJZbyRJgIiG iterator_concepts.hpp(43): error C2448: 'BOOST_concept' : 関数の定義</boost/iterator/iterator_concepts.hpp>…

C++14の言語機能の一部で少しサンプルを

C++

clang3.4で動きました。 #include <type_traits> #include <cassert> //通常の関数の戻り値の型推論 template <class T, class U> constexpr auto add(T t, U u) { return t + u; } //constexpr関数の制限緩和 constexpr int factorial(int n) { int sum = 1; for (int i = n; 0 < i; --i) { sum *= i</class></cassert></type_traits>…

Boost.Asioで簡単なチャット

簡単なチャットプログラムを書いてみました。Boost.AsioとWinsock2の2通り書いてみました。とにかく簡単に書こうとしたので、TCPで、同期通信しています。なので、一方的にメッセージを送ることはできず、必ずサーバ側とクライアント側が交互にメッセージを…

to_index, to_iterator書いてみた

C++

N3450を見て、非メンバ関数版のto_index, to_iteratorなんとなく書いてみました。本当ならクラスのメンバ関数ですが、気にせずに…。 #include <iterator> #include <type_traits> template <class Container> auto to_index(const Container& container, typename Container::const_iterator it) -> d</class></type_traits></iterator>…

Boost.AsioでHTTP通信

HTTP通信をするプログラムを書いてみました。WinScok2とBoost.Asioでそれぞれ書いてみました。簡単にするためにTCPで同期通信するプログラムです。WinSockの参考に「猫でもわかるWindowsプログラミング」を使ったのでアクセスするページがそうなっていますが…

UnityのスクリプトをVisual Studioで編集する方法

この方法でうまくいきました。シンプルな方法で気に入ってます。 こちら

新しいノートPCを買って最初にしたこと

最近新しくノートPCを購入しました。PCはVAIO Fit 14、OSはWindows 8 64bitです。新しいPCを買って最初に何をしたらいいのかわからず、調べながらやった作業を後のためにメモしておこうと思いました。 箱から取り出し、包装をはがす 領収書、説明書等、書類…