タグ

ブックマーク / faithandbrave.hateblo.jp (93)

  • C++1z 古くなった機能を非推奨化 - Faith and Brave - C++で遊ぼう

    C++1zから、標準ライブラリのいくつかの機能が非推奨となります。非推奨となった機能は将来のバージョンで削除される可能性がありますのでご注意ください。 std::iteratorクラス 自作イテレータを作るときに基クラスとして使用するstd::iteratorクラスですが、これを使ってもイテレータを定義するのはあまり簡単になりませんでした。 このクラスを使用することによって問題がより複雑になってしまうケースもありましたので、非推奨となります。 Boost.Iteratorのようなイテレータを簡単に定義するための新たな仕組みは提供されませんので、標準ライブラリの範囲では、イテレータは最初から最後まで自分で定義することになります。 std::allocatorクラスのいくつかのメンバと、std::allocator<void> C++11からアロケータの中間インタフェースとデフォルト実装を提

    C++1z 古くなった機能を非推奨化 - Faith and Brave - C++で遊ぼう
  • https://faithandbrave.hateblo.jp/entry/20130305/1362471502

    Itisango
    Itisango 2013/03/06
    Boost.Multiprecision 多倍長浮動小数点数
  • Boost.Multiprecision 多倍長整数 - Faith and Brave - C++で遊ぼう

    Boost 1.53.0から、多倍長演算ライブラリであるBoost.Multiprecisionが入りました。 このライブラリは、整数と浮動小数点数をサポートしていますが、今回は整数の方を紹介します。 以下は、多倍長整数で階乗を求める例です。 #include <iostream> #include <boost/multiprecision/cpp_int.hpp> using namespace boost::multiprecision; int main() { // 128ビット整数 int128_t v = 1; // 20の階乗を求める for (unsigned i = 1; i <= 20; ++i) v *= i; std::cout << v << std::endl; // 任意精度整数 cpp_int u = 1; // 100の階乗を求める for (unsig

    Boost.Multiprecision 多倍長整数 - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2013/02/12
    #boost で #多倍長整数 が扱えるとのこと。
  • マルチGPUライブラリMGPU - Faith and Brave - C++で遊ぼう

    A Multi-GPU Programming Library for Real-Time Applications MGPU documentation タイトルの通り、マルチGPUのGPGPUライブラリだそうです。 Boostベースで作られてるそうです(ソースコードがGitHubから現在削除されてるようなので、具体的に何を使ってるかはわかりません)。 作者のSebastian Schaetzさんは、Boost.SIMDのNT2プロジェクトの人みたいですね。

    マルチGPUライブラリMGPU - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2013/01/15
    マルチGPUライブラリMGPU
  • 標準スレッドライブラリのメーリングリスト - Faith and Brave - C++で遊ぼう

    cpp-threads -- C++ threads standardisation C++11標準スレッドライブラリの導入について議論されていたメーリングリスト。 このドキュメント「C/C++11 mappings to processors」を眺めてたら、リンクが貼られてました。

    標準スレッドライブラリのメーリングリスト - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/12/19
    標準スレッドライブラリのメーリングリスト
  • Boost.Graph スモールワールドを作る - Faith and Brave - C++で遊ぼう

    スモールワールドとは、ノードからほかのあらゆるノードにできるだけ早く到達できるようにするために、「各ノードがランダムなNのノードとつながっている」という状態にしたグラフのことを言います。 厳密な特徴は以下のような専門記事を読んでいただくとして、 スモールワールド - @IT スモールワールドネットワーク(small world network) Boost.Graphにはスモールワールドグラフを生成するboost::small_world_iteratorというジェネレータクラスが用意されています。 以下は、20頂点を持つグラフで、各頂点がランダムな6頂点と接続されているスモールワールドを作っています。 第1引数:乱数生成エンジンへの参照 第2引数:頂点数 第3引数:接続する頂点数 第4引数:辺をランダムに異なる頂点に再配線する確率(デフォルトでは0。1.0が最高) 第5引数:自己ループ

    Boost.Graph スモールワールドを作る - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/12/07
    Boost.Graph スモールワールドを作る
  • 幽霊型 - Faith and Brave - C++で遊ぼう

    幽霊型(Phantom Type)というのがあります。この名前はHaskell由来なのですが、C++でも使います。 私が以前作った「浮動小数点数と整数のstrong typedef」でも使っているのですが、以下のような、「型パラメータの宣言には現れるが、定義では使用されない型」を幽霊型と呼びます。 template <class FloatingPoint, class Tag> // Tagは内部では一切使わない class tagged_real { FloatingPoint value_; }; 型パラメータの異なる型は、別な型と見なされるので、それを利用してコンパイル時の型チェックを強化するのに使用します。 この例では、tagged_realとtagged_realのような、用途の異なる型同士の、暗黙の型変換を禁止するのに使用しています。 この例に限らず、C++のタグディスパッチ

    幽霊型 - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/12/05
    幽霊型
  • Boost.Coroutineが採択されました - Faith and Brave - C++で遊ぼう

    Review results for Coroutines コルーチンライブラリであるBoost.Coroutineが採択されました。 ドキュメントは以下になります: http://ok73.ok.funpic.de/boost/libs/coroutine/doc/html/ 以下レビュー結果の翻訳です。 == Oliver Kowalkeによって書かれたCoroutineライブラリに対して、2012/9/3から2012/9/12までの期間でレビューが行われた。7票の賛成票が提出され、いくつかの追加機能のリクエストが行われた。全体として、コミュニティの決定が明確になった: 「Oliver KowalkeのCoroutineライブラリを採択する」 盛んに行われた議論は、以下のポイントに触れた。 設計 Coroutineライブラリは、コミュニケーションソフトウェアと組み込みソフトウェアの設計

    Boost.Coroutineが採択されました - Faith and Brave - C++で遊ぼう
  • Boostをサポート環境外で動かす - Faith and Brave - C++で遊ぼう

    このエントリは、C++ Advent Calendar 2012の参加記事です。 Boost C++ Librariesは多くの環境をサポートしていますが、Boostでも手の届かない環境があります。それは、公開されていない開発環境です。たとえば、ゲームコンソールの開発環境は公開されていないので、ワークアラウンドを自分で書くことはできても、それを公開することはできません。 そういった環境で「Boost使えない!」と言って終わってしまうケースをたまに見ますが、Boostは多くの環境をサポートするために機能ごとのワークアラウンドを提供しているので、自分で設定を書けばサポート環境外でもBoostが使えます。 この記事は、クローズドなサポート外環境への設定を書く方法と、サポート環境とサポート外環境を含めたマルチプラットフォーム化のノウハウを紹介します。 環境を知り、環境を入力する Boostでは、環

    Boostをサポート環境外で動かす - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/12/01
    Boostをサポート環境外で動かす
  • 第2回 Boost.読書会 - Faith and Brave - C++で遊ぼう

    Boost C++ Librariesのソースコードリーディングを行うオンラインイベントです。 その第2回を以下の日程で行います。明日です。 日時: 12/01(土) 19:00〜21:00 場所: Boost.読書会 - co-meeting お題: Boost.Variant 毎回進行役は持ち回りで行っています。前回は私が進行役をやりましたが、今回はid:osyo-mangaさんです。(用事があるみたいなので、途中で私に交代します) 20:30くらいから次回のテーマ決めを行うので、途中からでも参加してみてください。 読書会の内容は、終了後にスナップショットを公開します。

    第2回 Boost.読書会 - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/11/30
    第2回 Boost.読書会
  • Boost.MPIのメーリングリスト - Faith and Brave - C++で遊ぼう

    http://lists.boost.org/mailman/listinfo.cgi/boost-mpi Boost.MPIのメーリングリストができました。

    Boost.MPIのメーリングリスト - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/11/29
    Boost.MPIのメーリングリスト
  • Effective C++読書会で発表してきました - Faith and Brave - C++で遊ぼう

    Effective C++ 読書会 vol.11 大阪〜第7章特別編〜 大阪で定期開催されているEffective C++読書会ですが、今回はテンプレートの章で特別編ということで、主催の遥佐保さんに呼ばれて行ってきました。 いつもの読書会と違い、今回は発表ありとのことだったので、ついでに「テンプレートとは何か」というタイトルで発表してきました。 読書会の議論を進める上で共通認識を作るための簡単なものなので、網羅的ではないですが全体的にさらっと紹介してみました。 What is template from Akira Takahashi 今回の読書会を通して、いくつか標準に提案する必要のあることが見えてきました。それはどこかで書こうと思います。

    Effective C++読書会で発表してきました - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/11/26
    Effective C++読書会で発表してきました
  • Boost.Thread スタックサイズを設定する - Faith and Brave - C++で遊ぼう

    boost::threadクラスには、attributesという内部クラスがあります。これのメンバ関数であるset_stack_size()を使用することで、スレッドの作成に使用するスタックサイズをstd::size_tで指定できます。 スタックサイズを設定したattributesオブジェクトへの参照をboost::threadクラスのコンストラクタに渡すことで、設定が反映されます。 #include <boost/thread.hpp> int main() { boost::thread::attributes attr; attr.set_stack_size(1024 * 10); // スタックサイズを10KBに設定 boost::thread t(attr, []{}); t.join(); } スレッドの作成に使用するスタックサイズを取得するget_stack_size()と

    Boost.Thread スタックサイズを設定する - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/11/16
    Boost.Thread スタックサイズを設定する
  • C++1y static if - Faith and Brave - C++で遊ぼう

    C++1yでは、D言語にもあるstatic ifが提案されています。 宣言と文が現れるあらゆるところで使えるようにしよう、ということで考えられいて、ユースケースもいろいろ考えられています。 まず、コンパイル時条件によって処理を呼び分ける基的な用途。 以下の、コンパイル時条件で分岐するような処理は、これまで関数オーバーロードでやっていました。 static if (sizeof(size_t) == 8) { // 64ビット版のコンパイルではこっち void fun(); } else { void gun(); } 次に、クラスの定数/型定義。 以下の階乗のような例は、これまで特殊化でやっていました。 template <unsigned long n> struct factorial { static if (n <= 1) { enum : unsigned long { val

    C++1y static if - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/11/14
    C++1y static if
  • 配列の要素アクセスをコンパイル時に境界チェックする - Faith and Brave - C++で遊ぼう

    C++11のstd::arrayクラスには、std::get()という非メンバ関数が用意されています。 これは、配列の要素に、コンパイル時定数のインデックスを指定して要素アクセスするための関数です。インデックスが配列の範囲外だった場合はコンパイルエラーにしてくれます。 #include <array> int main() { std::array<int, 3> ar = {1, 2, 3}; // OK : 1が取得される int& a = std::get<0>(ar); // コンパイルエラー! : 範囲外 // int& b = std::get<5>(ar); } インデックスがコンパイル時に決定できる場合は、std::get()フリー関数を使用すれば実行時に範囲外アクセスが起こりえなくなります。積極的に使っていくといいと思います。 なお、範囲外アクセスをコンパイルエラーにして

    配列の要素アクセスをコンパイル時に境界チェックする - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/11/09
    配列の要素アクセスをコンパイル時に境界チェックする
  • C++1y ネットワーク関係のミーティング議事録 - Faith and Brave - C++で遊ぼう

    N3491 Minutes: SG4 Networking, October 2012 ポートランド会議での、ネットワーク関係のミーティング議事録。 C++11までは、コア言語、ライブラリ、進化という大きく3つのワーキンググループに分かれて策定作業が行われていました。 C++1yでは、TR2という大きな枠組の中でライブラリを議論するのではなく、並行関連やネットワーク関連に深い知識のあるメンバを集めた専門家グループを立てて、議論が進められています。 SG1 : 並行・並列 SG2 : モジュールシステム SG3 : ファイルシステム SG4 : ネットワーク SG5 : トランザクショナルメモリ SG6 : 数値計算 ※SGはStudy Groupの略 今回公開されたのはネットワーク関係の議事録です。 まずAsioについて。C++1yではネットワークの基礎ライブラリとして、Boost.Asi

    C++1y ネットワーク関係のミーティング議事録 - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/11/08
    C++1y ネットワーク関係のミーティング議事録
  • nothrowなdelete - Faith and Brave - C++で遊ぼう

    C++のnew演算子は、失敗時にデフォルトでstd::balloc例外を投げますが、std::nothrowを指定することにより、失敗時にヌルが返ってくるようにできます: #include <new> int main() { int* p = new(std::nothrow) int[3]; // 失敗時にヌルが返る if (p == nullptr) { ... } delete[] p; } このnothrow版のnew演算子も、ほかの演算子と同様に置き換え可能になっています。そして、置き換え可能な演算子には、なぜかnothrow版のdeleteもあります: void operator delete(void* ptr, const std::nothrow_t&) noexcept; void operator delete[](void* ptr, const std::not

    nothrowなdelete - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/11/07
    [std::nothrow]
  • 『C++のためのAPIデザイン』レビュー - Faith and Brave - C++で遊ぼう

    翻訳監修の三宅さん( @miyayou )さんから献いただきました!ありがとうございます。 書は、関数、クラス、ライブラリといった誰かに使ってもらうためのプログラムを書くプログラマのためのです。ほかの人に使ってもらうプログラムを書くために考えるべき多くのことが書かれています。たとえば、以下のようなことを考える必要があります: ユーザーに公開するインタフェースはどうあるべきか。実装詳細はどれで、ユーザーは何を知っていれば十分なのか。それはどの場面で使用できるだろうか、いま目の前にある目的を達成できればいいのか、はたまた多くの場面で再利用したいのか。 バージョンに関しても考えなければいけない。このAPIは後方互換性を保てるほど入念に考えられているだろうか。どうしても破壊しなければいけない場合、どういう設計選択をするべきか。 ドキュメントはどこまで書くべきだろうか。自動テストは何のために書

    『C++のためのAPIデザイン』レビュー - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/11/06
    『C++のためのAPIデザイン』レビュー
  • C++のポータルサイト - Faith and Brave - C++で遊ぼう

    http://isocpp.org/ C++公式のポータルサイトができました。 このサイトは、Bjarne Stroustrup、BoostProのBeman Dewes、MicrosoftのHerb Sutterといった人たちが立ち上げた、Standard C++ Foundationという非営利組織によって運営されます。 現代的なC++に関する最新情報、高品質なライブラリやツールサポートといった情報を広めていくことを目的としています。

    C++のポータルサイト - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/11/06
    C++のポータルサイト
  • 出力するたびにフラッシュする - Faith and Brave - C++で遊ぼう

    C++標準のIOStreamには、std::unitbufフラグというのがあります。これを出力ストリームに設定することで、繰り返し出力を行う処理で、出力するたびにフラッシュが行われるようになります。 #include <fstream> int main() { std::ofstream file("a.txt"); file << std::unitbuf; for (int i = 0; i < 10; ++i) { file << i; // 出力するたびにフラッシュされる } } これは、以下のコードと同じ意味になります: #include <fstream> int main() { std::ofstream file("a.txt"); for (int i = 0; i < 10; ++i) { file << i; file.flush(); // 自分でフラッシュする

    出力するたびにフラッシュする - Faith and Brave - C++で遊ぼう
    Itisango
    Itisango 2012/10/30
    これは覚えておこう。