タグ

c++に関するhideokiのブックマーク (20)

  • boost::is_convertible はどうやってるか - IT戦記

    概ね以下のような感じ template <typename From, typename To> struct is_convertible_basic_impl { // 2 つの同名関数を作って static no_type _m_check(...); static yes_type _m_check(To); // 関数の戻り値の型を見る(どっちの関数が使われるかを見る) static bool value = sizeof( _m_check(From) ) == sizeof(yes_type); }; これで From 型のオブジェクトが To 型に代入できるかが、コンパイル時に分かるのな sizeof の以外な使い道。

    boost::is_convertible はどうやってるか - IT戦記
    hideoki
    hideoki 2009/07/24
  • More C++ Idioms - Wikibooks

    C++ はあまりに『熟練者に優しく』なってしまった」(C++ has indeed become too "expert friendly") Stroustrup 氏の言は真実である。なぜなら熟練者は言語のイディオムに深く精通しているからである。プログラマが理解するイディオムの増加に従って、言語は彼あるいは彼女にとってよりフレンドリーになる。この open content book の目的はほどほどに C++ に精通しているプログラマに対して現代的な C++ のイディオムを提示し、C++ をよりずっとフレンドリーに感じるレベルにまで知識を引き上げる助けと成る事である。書は熟練した C++ プログラマが C++ を使ってプログラミングや設計を行う際に用いる事の多い再利用可能なイディオムの網羅的なカタログと成るよう意図されている。これは、それらのテクニックや語彙をひとまとめにしようという

  • Tx: Succinct Trie Data Structure

    English 概要 TxはコンパクトなTrieを構築するためのライブラリです.従来のTrieの実装(darts等)に比べ1/4〜1/10の作業領域量で辞書を保持することができ、数億〜十億キーワードなど大規模な辞書を扱うことが可能です.Trieは文字列からなるキー集合を処理するデータ構造で、キーが辞書に含まれているかのみではなく、キーのPrefixが含まれているかを高速に求めることができます.内部データ構造にはSuccinct Data StructureであるLevel-Order Unary Degree Sequence (LOUDS)を利用しています. ダウンロード Txはフリーソフトウェアです.BSD ライセンスに従ってソフトウェアを使用,再配布することができます. tx-0.12.tar.gz: HTTP Archives tx-0.11.tar.gz: HTTP tx

  • The ADAPTIVE Communication Environment (ACE)

    I'm teaching a free online course on patterns and frameworks for concurrent and networked software for Coursera. Introductory video to my Coursera course on patterns and frameworks for concurrent and networked software

  • C++と Pthreads でミニマルなHTTPサーバを書く - いやなブログ

    C++と Pthreads でミニマルなHTTPサーバを書く 『UNIXネットワークプログラミング』を読んでいると、自分でも何かネットワーク系の小さなプログラムを書いてみたくなりました。そこで、ミニマルなHTTPサーバを C++と Pthreads で書いてみました。 同じ著者の「詳解UNIXプログラミング」もそうだったように、今回のもほとんどすべてのページに、重要なことが書かれています(最後のほうのXTIの部分は例外かもしれませんが)。 たとえば、27章ではネットワークサーバの実装として、次の設計方針がそれぞれ検討され、実際のコード付きで解説されています。 クライアントごとに fork 事前に fork - 各プロセスで accept 事前に fork - ファイルロックで accept を保護 事前に fork - Mutex ロックで accept を保護 (PTHREAD_PRO

  • SN library

    アセンブラを使わない C++による多倍長計算ライブラリ SN library Ver. 2.17.1 Copyright (C) 1999-2005 K.Tsuru 2007年12月27日更新 このページをブックマークに加えないでください。将来,URLを変更するかもしれません。 SNのSはSuperまたはSpecialを,NはNumberを意味します。 gcc を使えば, 時間とメモリが許せばの話ですが,32 ビットシステムの限界桁数(約40億桁)までの多倍長計算ができます。 gcc version のソースファイルは英語版のページからダウンロードしてください。 ライブラリは GNU  Library General Public License (LGPL) Version 2 にしたがって配布しています。GNU LGPL Version 2については sn217.zi

  • C++ Coding Standard

    Using this Standard. If you want to make a local copy of this standard and use it as your own you are perfectly free to do so. That's why I made it! If you find any errors or make any improvements please email me the changes so I can merge them in. I also have a programming blog at http://radio.weblogs.com/0103955/categories/stupidHumanProgramming/ that is accidently interesting at times, as is my

  • Let's Boost

    Boost C++ Libraries の紹介サイトです。 :: by Google はじめに ご挨拶 Boost のインストール方法 参考リンク集 ニュース ◆ Version 1.42.0 と 1.41.0 対応 (2010/03/14) 新規ライブラリに関する Let's Boost のページ…: property_tree (汎用木構造型コンフィグ管理) / uuid (ユニークID生成器) ◆ RSS つけました (2009/08/28) ◆ Version 1.40.0 と 1.39.0 対応 (2009/08/28) 新規ライブラリに関する Let's Boost のページ…: Signals2 (Signal/Slotライブラリ改良版) ◆ Version 1.38.0 と 1.37.0 対応 (2009/02/22) 新規ライブラリに関する Let's Boost のペー

  • Boost C++ Libraries Document

    ライブラリ . ドキュメント: 最新のリリース CVS(毎日更新) . ライセンス . Getting Started . 退行テスト: 一般的な情報 テスト結果 メーリングリストと ニュースグループ . Boost (Developers) . Boost Users . Project-Specific . Announcements . Discussion Policy サポート . FAQ . Request Support . Report Bugs . Suggest Features . Commercial Support . Also: Mailing Lists About . Formal Reviews . Review Schedule . Requirements . Guidelines . Submissions Other Resources . Fil

  • [Caml-list] Stroustrup et al. propose to introduce "lambda closures" in C++

    hideoki
    hideoki 2006/03/17
    c++にクロージャ
  • 革命の日々! Bjarne Stroustrup による "Lambda expressions and closures for C++"

    3/16 < とか > とかを &lt; &gt; を使わず生で書いているところが多々ありました。すいません。 直しました。 --------- cppllメーリングリストの投稿によると C++の生みの親ストラウストラップ先生がC++にクロージャーを導入する言語拡張を提案しているらしいです。 提案自体は賛成、というかクロージャーできないおかげでいままでC++がどれだけ醜いプログラムになってきたかを考えれば遅すぎたぐらい。 特にSTL使うと関数オブジェクトつくりまくる羽目になるし・・・ しかし、しかしだ。 これはないんじゃないの? 以下、引用 挙げられていた例として,xとyを引数にとって合計を返すLambda関数は, <> (int x, int y) -> int { return x + y; } と表現されるようです。さらに'extern'キーワードにより, Lambda関数外の変数を

    hideoki
    hideoki 2006/03/17
    クロージャが導入される???
  • C/C++ リファレンス

    hideoki
    hideoki 2006/01/17
  • 配列へのポインタと配列へのリファレンス - bkブログ

    配列へのポインタと配列へのリファレンス C/C++ のあまり使われない機能に、配列へのポインタと配列へのリファレンスがあります。ここでは、それらがどのようなものかまとめたいと思います。 C 言語には配列の先頭要素へのポインタとは別に配列へのポインタ が存在します。。プログラミング言語Cの 5.7 に多次元配列を受け取る関数の例が載っています。 次のプログラムではサイズ 256 の char 型の配列を作り、その配列へのポインタ p を作っています。++p を実行すると p の指すアドレスは 256 バイト分進みます。 #include <stdio.h> int main() { char foo[256]; char (*p)[sizeof(foo)] = &foo; printf("%p\n", p); ++p; printf("%p\n", p); // 256 バイト分進む ret

    hideoki
    hideoki 2005/12/19
    いざというときに役に立つ知識
  • main() の前に関数を呼ぶ - bkブログ

    main() の前に関数を呼ぶ C/C++ のプログラムで、main() の前に関数を暗黙的に呼びたいときがあります。ここでは GCC の拡張を使った方法と、C++ のコンストラクタを使った方法を紹介したいと思います。 GCC では main() の前に呼ばれる関数を __attribute__((constructor)) という拡張機能を使って定義できます。たとえば、次のプログラムでは main() の前に foo() が呼び出されます。 #include <stdio.h> __attribute__((constructor)) void foo() { printf("hello, before main\n"); } int main (int argc, char **argv) { printf("hello, world\n"); return 0; } 実行結果は以下の

    hideoki
    hideoki 2005/12/19
  • いやなブログ: STL のバインダとリファレンスへのリファレンス問題

    STL のバインダとリファレンスへのリファレンス問題 STL に含まれる bind1st と bind2nd は for_each や find などの関数と組み合わせて使うと便利です。しかしながら、リファレンス (参照) を引数に取る関数の引数をバインドすることはできないので注意が必要です。 注意が必要ですと言いつつ、自分がこの問題を知らずにはまりました。次のようなコードで問題は起きます。 #include <algorithm> #include <functional> #include <iostream> #include <string> #include <vector> using namespace std; void print(const string& s1, const string& s2) { cout << s1 << ": " << s2 << endl;

  • Boost C++ Libraries

    Boost C++ Libraries ...one of the most highly regarded and expertly designed C++ library projects in the world. — Herb Sutter and Andrei Alexandrescu, C++ Coding Standards Welcome to Boost.org! Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work well with the C++ Standard Library. Boost libraries are intended to be widely useful, and usable across a br

    Boost C++ Libraries
  • STL の string のリファレンスカウント - bkブログ

    STL の string のリファレンスカウント Effective STLによると、多くの STL の実装では string クラスの内部において、文字列のコピーを減らすために、リファレンスカウントが行われているそうです。そこで、手元の環境の string クラスでリファレンスカウントが実際に行われているか調べてみました。 結論としては、Debian GNU/Linux sarge + GCC 3.3.5 の環境では、リファレンスカウントが行われていました。次のコードをコンパイルして実行すると 2つの string オブジェクトの data() は同じアドレスを指している (つまり、メモリ上の同じ文字列を共有している) ことがわかります。 #include <stdio.h> #include <string> using namespace std; int main() { stri

    hideoki
    hideoki 2005/11/10
  • operator newを書くなら、operator delete も書こう 10項 - higepon blog

  • リンクと同名シンボル: weak シンボル編 - bkブログ

    リンクと同名シンボル: weak シンボル編 先日の記事では静的リンクの際に同名シンボルの衝突は検出されると書きました。しかし、 weak シンボルが存在すると話は変わります。 次のようなプログラム main.cpp があります。 #include <iostream> class Foo { public: Foo(int x) : x_(x) {} void func() { std::cout << x_ << std::endl; } private: int x_; }; int main () { Foo foo(256); foo.func(); return 0; } このプログラムをコンパイルして実行すると 256 と表示されます。 % g++ -c main.cpp % g++ -o main main.o % ./main 256 ここで、main.cpp とはまった

    hideoki
    hideoki 2005/10/12
    リンカでのシンボルの衝突の問題
  • いやなブログ: C のテンプレートでダックタイピング

    C++ のテンプレートでダックタイピング RubyPython などの動的な言語では、ダックタイピング (duck typing) というテクニックが多用されています。 ダックタイピングは、同じインタフェースさえ備えていれば型は何でも構わない、という考え方に基づく多態 (polymorphism) の手法です。アヒルのように見えて、アヒルのように鳴くなら、アヒルに違いない、というわけです。 そして、現在最も注目を浴びている言語である C++ でもテンプレートを用いるとダックタイピングを行えます。 ダックタイピングを使うと、継承関係を無視して多態的にオブジェクトのメソッドを呼び出せます。たとえば、次の Ruby のコードでは、func に Duck と Foo のどちらのオブジェクトを渡しても正常に動作します。これは Duck, Foo ともに、共通のインタフェースを持つ quack

    hideoki
    hideoki 2005/10/03
  • 1