C#書いていて、これC++にも欲しいなぁ、と思ったり、普通にこういう機能欲しいと思ったものです。 ネストした名前空間 今のC++ではこう書かないといけません。 namespace hoge { namespace foo { ... } } をこう書けたら良いなぁ、と思いました。 namespace …
※12/19 追記 記事書いて数日公開したら、言いたい欲がスッキリので消します。
今年読んだ技術書をまとめようと思います。年末なので振り返ってみようと思います。 今年はよく電車に乗ったりして暇を潰す機会が多かったのと、意識的に積み本を消化しようとしていたのでたくさん読みました。1回読んだだけでは全て理解しきれないので、何…
マルチメソッド3 力まかせ改良編の続きです。 basic_dispatcher flat_mapを使う RTTI(実行時型情報)と、type_index(typeinfoを比較できるようにラップした型)の2つがあることにより、全ての型に対して(もちろん動的な型も含みます)、順序関係を持つことが出…
STLアルゴリズムはそのアルゴリズムを適用する範囲の先頭と末尾のイテレータのペアを引数に取ります。実際には範囲全体にアルゴリズムを適用させるケースが多く、イテレータのペアを書くのが冗長に感じることがあります。そこでBoost.Rangeには、範囲を引数…
boost::shared_ptrをシリアライズする際にハマったのでメモしておきます。 boost::shared_ptrのトラッキングレベルはboost::shared_ptrの型Tのトラッキングレベルに依存しています。そして、その型Tのトラッキングレベルはboost::serialization::track_never…
デフォルトコンストラクタを持たないクラスをシリアライズする。 save_construct_dataを使う、とかいった情報は出てくるのに、肝心のアーカイブ化するサンプルコードが探した限りあんまり無いので、サンプル張っておきます。ここに知りたいことが書いてあり…
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ですが、constexpr関数のコンパイル時再帰深度について調べてみました。 constexpr int func(int n) { return n == 0 ? 0 : func(n - 1); } int main() { static_assert(func(512) == 0, ""…
ソース 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が使えます!!!(コンストラクタ除く) コンパ…
補欠参加だったので、前日までに枠に入れてラッキーでした。 普段ブログやtwitterで一方的によく知っている人たちに生で会えるということも目的の一つに参加してきました。 C++11 : variadic template のご紹介 発表者 επιστημηさん 資料 http://www.slidesh…
以下のコードが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>…
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とWinsock2の2通り書いてみました。とにかく簡単に書こうとしたので、TCPで、同期通信しています。なので、一方的にメッセージを送ることはできず、必ずサーバ側とクライアント側が交互にメッセージを…
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>…
HTTP通信をするプログラムを書いてみました。WinScok2とBoost.Asioでそれぞれ書いてみました。簡単にするためにTCPで同期通信するプログラムです。WinSockの参考に「猫でもわかるWindowsプログラミング」を使ったのでアクセスするページがそうなっていますが…
この方法でうまくいきました。シンプルな方法で気に入ってます。 こちら
最近新しくノートPCを購入しました。PCはVAIO Fit 14、OSはWindows 8 64bitです。新しいPCを買って最初に何をしたらいいのかわからず、調べながらやった作業を後のためにメモしておこうと思いました。 箱から取り出し、包装をはがす 領収書、説明書等、書類…
実現したい機能を決めます。 その機能を実装する際の実装の選択肢をポリシーとして抽出します。 共通のインターフェイスで扱えるようにポリシーのtraitsを作ります。 自作ポリシーに特殊化したtraitsを作ります。 完成
boost::multiprecision::cpp_dec_float(以下cpp_dec_float)からboost::multiprecision::cpp_int(以下cpp_int)へ直接変換する方法はありません。同様にcpp_intからcpp_dec_floatへ直接変換する方法はありません。*1 cpp_intもcpp_dec_floatも、文字列へ変換す…
マルチメソッド2 力任せ編の続きです。Modern C++ Designに載っているマルチメソッドを自分なりの解釈を加えながら、LokiライブラリではなくBoostライブラリを用いて実装してみようという試みです。 前回書いたように今回はstatic_dispatcherの改良として、…
Visual Studio 2013 RCがリリースされました。 C++が好きな自分としてはPreviewから更に新しく追加されたC++11/14の機能が気になります。(自分はC99については分からないので触れていません) さっそくPremium版をインストールして遊んでみました。 #include <type_traits></type_traits>…
こちら 持っている本、持っていない本混ざってますが、いつか揃えたい本です。
Lokiのマルチメソッドライブラリの実装がどうなっているのか調べて理解しつつ、BoostやC++11で書きなおして使おうという目的。 専用のカテゴリを作ってもカテゴリが増えて煩雑になるので、関連する記事はそれらを纏めた記事を作ることで纏めようと思います。…
前回の記事のSFINAE版
はてなブログのGistのソースコード貼り付けが公式で対応したのでそれの試用も兼ねて。 好奇心でこういった関数テンプレートを作れるんじゃないかと思って挑戦してみました。 C++でキャストの種類ごとに長い名前付いた理由を考えればこのような関数テンプレー…
こちら URL
元ネタに載っている変換方法を使ったサンプルを書いてみた。*1 atoi #include <cstdlib> #include <iostream> #include <string> #include <typeinfo> int main() { const std::string str("123"); auto num = std::atoi(str.c_str()); std::cout << typeid(num).name() << " : " << num << std::e</typeinfo></string></iostream></cstdlib>…
以前の記事でBOOST_PP_REPEATについて書きました。 BOOST_PP_REPEATは似たような記述を繰り返す際に利用できます。例えば、以下の様です(このコード自体に意味はありませんが…) #include <boost/preprocessor/cat.hpp> #include <boost/preprocessor/repeat.hpp> #define VALUE(z, n, d) const int BOOST_PP_CAT(VALUE_, </boost/preprocessor/repeat.hpp></boost/preprocessor/cat.hpp>…
色々やりたいことがあって手がつかないという状態なので整理する。 やらなければならないこと 就活 卒研のプログラム やりたいこと オレオレライブラリ書き C++ライブラリ WinAPIラップライブラリ DirectXラップライブラリ DXライブラリで3Dゲーム制作 Direc…