タグ

c++とC++に関するmattnのブックマーク (120)

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    mattn
    mattn 2009/10/08
    またmattnテンプレかw
  • Twitter の半径数クリック以内の情報収集 - IT戦記

    ちょっと 現実頭皮的に自己満足的プログラムを書きたくなったので Twitter のクローラーを書いてみた。 C++ にしては、割とすっきり書けて満足。 使ったライブラリ soci データベースライブラリ picojson json パーサー boost.asio ネットワークライブラリ boost.date_time 日付時刻ライブラリ ソース #include <cassert> #include <soci.h> #include <soci-sqlite3.h> #include <unistd.h> #include <iostream> #include <sstream> #include <picojson.h> #include <boost/scoped_ptr.hpp> #include <boost/asio.hpp> #include <boost/cast.hpp

    Twitter の半径数クリック以内の情報収集 - IT戦記
    mattn
    mattn 2009/08/16
    おー。いいすねー。
  • ユーザー定義のクラスをFusionのコンテナ(タプル)として使用する - Faith and Brave - C++で遊ぼう

    Boost.Fusionでは、様々なデータ構造のタプルが提供され、 それらのタプルに対して使用できるSTLライクなアルゴリズムも提供されています。 たとえば、タプルの全要素を出力するには以下のように書きます。 #include <iostream> #include <string> #include <boost/fusion/container/vector.hpp> #include <boost/fusion/algorithm.hpp> struct disper { // パラメータの型が毎回変わる(int, double, std::string)のでテンプレートにする template <class T> void operator()(const T& x) const { std::cout << x << std::endl; } }; int main() { us

    ユーザー定義のクラスをFusionのコンテナ(タプル)として使用する - Faith and Brave - C++で遊ぼう
  • 多相ラムダがあるとうれしいこと - Faith and Brave - C++で遊ぼう

    多相ラムダはおそらく以下のように書けて [](const hoge& x){ cout << x << endl; } // 単相ラムダ(monomorphic lambda:C++0xに入る方) [](const& x) { cout << x << endl; } // 多相ラムダ(polymorphic lambda) (const auto&かもしれないけど、シンタックスはここでは些細な問題) 多相ラムダよって生成される関数オブジェクトは以下のようになると思います。 struct F { template <class T> void operator()(const T& x) const { cout << x << endl; } }; これがあると、Boost.Fusionのコンテナに対する処理が簡単に書けるんじゃないかと思います。 たとえば、多相ラムダがないうちは、以下の

    多相ラムダがあるとうれしいこと - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2009/08/04
  • Programming Principles and Practice Using C++

    (原書)が届きました。 全編カラーの1200ページover、 なんとも厚苦しいですこと。 こいつの監修だってばよ。 年内リリースを目指します。応援よろしくぅ! 投稿日時 : 2009年8月1日 17:18 コメントを追加 # re: Programming Principles and Practice Using C++ 2009/08/01 17:51 囚人 の翻訳って事なんですかね~? 1200ページとは、腕も頭も鍛えられますな♪ 楽しみにしております。 # re: Programming Principles and Practice Using C++ 2009/08/01 18:31 zak >1200ページover これが棚に二冊(原著と訳)だ・・・と・・・? C++タワーの高さが一挙に跳ね上がりますね。 # re: Programming Princi

    mattn
    mattn 2009/08/01
    επιστημηさん監修 1200ページw
  • コード量を減らすためだけのラムダ式活用 - Faith and Brave - C++で遊ぼう

    ※このエントリではIDEによるコード補完は一切考慮していません 【before】 #include <vector> int main() { std::vector<int> v; v.reserve(5); v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); } v.push_backって打つのめんどい><。 ↓ 【関数に切り出してみる】 #include <vector> template <class T> void push(std::vector<T>& v, const T& x) { v.push_back(x); } int main() { std::vector<int> v; v.reserve(5); push(v, 1); push(v, 2); push

    コード量を減らすためだけのラムダ式活用 - Faith and Brave - C++で遊ぼう
    mattn
    mattn 2009/07/30
  • 任意のイテレータを抽象型にラップするイテレータを書く話 - kazuhoのメモ置き場

    C++ で仮想メンバ関数テンプレートを使いたい - kazuhoのメモ置き場の件、id:moriyoshi さんからトラックバックをいただきました。ありがとうございます。 それにしてもこの 2 つは当に水と油だね。typeinfo 見てディスパッチする、というのがばっちりはまる場合というのも結構ありそうだけど、今回は「2 つのイテレータで表される range を受け取るテンプレート関数を仮想関数にしたい」というような状況に限定して考えてみる。 テンプレートメンバ関数と仮想関数を (半ば強引に) 組み合わせる - muddy brown thang イテレータの操作を仮想関数にして良いのであれば、以下のように書けば、きれいのではないかと思いました (const_iter とか traits は省略)。なんで boost にないんだろ。って、boost:any_iterator てのがあるの

    任意のイテレータを抽象型にラップするイテレータを書く話 - kazuhoのメモ置き場
    mattn
    mattn 2009/07/28
  • STL のコンテナとか std::string の thread safety - kazuhoのメモ置き場

    SGI STL のマニュアルには、 The SGI implementation of STL is thread-safe only in the sense that simultaneous accesses to distinct containers are safe, and simultaneous read accesses to to shared containers are safe. If multiple threads access a single container, and at least one thread may potentially write, then the user is responsible for ensuring mutual exclusion between the threads during the container

    STL のコンテナとか std::string の thread safety - kazuhoのメモ置き場
    mattn
    mattn 2009/07/16
  • g++ exception handling - memologue

    Code Project という有名サイトに、VC++の例外処理方法に関する記事があります (http://www.codeproject.com/cpp/Exceptionhandler.asp) が、そこにg++の例外処理方法を解説したコメントがありました。 ざっくりと次のような事を言っています(翻訳してるわけではないので詳しくは英文読んでください)。 g++は、VC++とはちょっと違うやりかたで例外処理を実装している。g++の場合、実際に例外がthrowされない限りは、try/throw/catchを使ったコードを書いてもランタイムのコストはかからない。 foo()がbar()を呼んでいて、bar()が例外を投げるとせよ。このとき、foo()はスタックに戻りアドレス*1を置いてからbar()を呼ぶ。この戻りアドレスを仮にXとする。 このときコンパイラは、 (X, 掃除コードのアドレス

    g++ exception handling - memologue
    mattn
    mattn 2009/07/15
    ほー
  • CBBs - Concurrent Building Blocks

    About CBBs What is CBBs? News Quick Links Wiki Blog Issue Tracker Tutorial Quick Start Java Components C++ Components STM Get CBBs Download Release Notes Licence Get Involved Contributor Licenses Developer Docs Java API Docs C++ API Docs Project Documentation Project Information About Issue Tracking Mailing Lists Project License Project Team Overview Project provides a set of concurrent building b

    mattn
    mattn 2009/07/14
  • 「C++ は難しいから」と言う定説 - Cube Lilac

    雑記. C++ は難しいから Java から始めた方が・・・ ここ最近(と言うか以前からずっとですが),上記のようなアドバイスを見かける機会が多かったせいか「C++ の何を指して(Java と比べて)難しいと言っているのだろう?」と言う事を単純に疑問に思うようになりました.Java 自体はほとんど使ったことないのですが*1,感想としては「どちらも大して変わらない」と言うものだったので余計に気になっています. 以下,現状で私が「これが要因かなぁ」と思っている事を列挙してみます. C++ には XXX と言うクラス/関数がない 可能性として一番高いのはこれかなぁと思っています.C++ の標準ライブラリは必要最低限のものしか(必要最低限のものさえも?)用意されていないので,他の言語と比べてライブラリの貧弱さは目立ちます.Boost を含めればかなりマシになりますが,それでもキツいかなと言う印象を

    「C++ は難しいから」と言う定説 - Cube Lilac
    mattn
    mattn 2009/07/13
  • http://kazuho.31tools.com/svn/incline/trunk/src/start_thread.h

    mattn
    mattn 2009/07/10
    run()をスレッド実行するテンプレート
  • More C++ Idioms/奇妙に再帰したテンプレートパターン(Curiously Recurring Template Pattern) - Wikibooks

    template <class Derived> struct base { void interface() { // ... static_cast<Derived*>(this)->implementation(); // ... } static void static_interface() { // ... Derived::static_implementation(); // ... } // デフォルトの実装は存在すれば、継承した派生クラスでオーバーライドされるかもしれないし、 // 存在しない場合は、派生クラスでしなければならない(下記参照) void implementation(); static void static_implementation(); }; // 奇妙に再帰したテンプレートパターン(Curiously Recurring Template Pa

    mattn
    mattn 2009/07/07
  • Kazuho@Cybozu Labs: PicoJSON, a header-file-only JSON parser in C++

    Last week I had been looking for a tiny JSON parser written in C++, but was not able find one that met my needs (jsonxx was the most interesting, I took its is<type> and get<type> interfaces).  So instead I wrote my own, and that is PicoJSON.  The advantages of PicoJSON over other C++ JSON parsers are as follows. C++ header-only implementation (just include the header file from your source code an

  • 2004-06-05

    CRTPについてちまちま書いていたのをまとめてみました. CRTP(Curiously Reccursive/Reccuring Template Pattern)とは以下のように基底クラスのテンプレート引数として自分自身を代入するテクニックのことを指します. template class Base{/*.....*/}; class C : public Base{/*.....*/}; よく見かけるパターンなので,これがどういう使われ方をしているかを適当にまとめてみました. あるクラスの機能の一部を変えてコードの再利用を行う場合,変えたい機能を提供するメンバ関数を仮想関数にしてそれを派生クラスでオーバーライドするのが通常の方法ですが,CRTPを使えば仮想関数を用いずに行うことができます. 自分で何か良さそうな例を書こうと思ったのですが,あんまり適切な例が思い浮かばないので,このCRTP

    2004-06-05
    mattn
    mattn 2009/07/06
  • Kazuho@Cybozu Labs: スレッド間で共有する変数のアクセス権制御を C++ コンパイラで強制する方法

    マルチスレッドなプログラムを書いていると、スレッド間で共有する変数へのアクセスを正しく直列化できているか、という点が常に問題になります。どうせなら、正しく書けているかコンパイル時に確認したいよね、ということで、以下のような C++ テンプレートを書いてみました。 template <typename T> class cac_mutex_t { public: class lockref { protected: cac_mutex_t<T>* m_; public: lockref(cac_mutex_t<T>& m) : m_(&m) { pthread_mutex_lock(&m_->mutex_); } ~lockref() { pthread_mutex_unlock(&m_->mutex_); } T& operator*() { return m_->t_; } T* ope

    mattn
    mattn 2009/06/24
    これならスマートポインタ使わなくても...と思ったけど、シリアライズかー。使えそう。
  • C++ のプログラムのデバッグを楽にする方法

    Google が公開しているソフトウェアの解説シリーズ(→その1 , その2)の続きです。今回は google-glog を使ってスタックトレースを表示する方法についてご紹介します。 C++ でプログラムを書いているとよく遭遇するのがセグメンテーション違反というエラーです。不正なアドレスへのアクセスなどによりセグメンテーション違反が起きると、通常、 UNIX 系の OS では SIGSEGV というシグナルによってプログラムが終了するとともに、 core というファイルが作られます。 core ファイルにはデバッガから参照できるいろいろな情報が残っていますが、多くの場合に役に立つのは、スタックトレースという情報です。スタックトレースを見れば、プログラムがどこでクラッシュしたのか、どのような関数を経由してそこにたどり着いたのかがわかります。プログラムがクラッシュした箇所を特定できれば、単純な

    C++ のプログラムのデバッグを楽にする方法
    mattn
    mattn 2009/04/13
  • C++ Library Links

    このページの他に、岡野原さんの "C++の便利ツール・ライブラリ" がオススメです。 標準ライブラリ STL その1。主に、リストやマップなどのコレクションに関する generic なデータ構造とアルゴリズム。 iostream その2。ストリーム入出力。 C.std その3。まだまだ現役。 boost 準標準。上の3つを超強力にした/するライブラリ達の集合体。 並列・ネットワーク・XML TBB (Thread Building Blocks) スレッドセーフなコンテナやスレッドをフル活用した並列アルゴリズムなど TinyXML 名前の通り軽量でまとまってるXMLパーザ。 MiX Minimalists XML parser。同じくXMLパーザ。 libcurlpp FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE, LDAP によるフ

    mattn
    mattn 2009/04/11
  • C++ の string と vector の reserve() の挙動 - bkブログ

    C++ の string と vector の reserve() の挙動 C++ の string と vector には前もって容量を確保するための reserve() というメンバ関数があります。何気なく使っていた関数ですが最近になって興味深い挙動に気づきました。 reserve() の基 string と vector の reserve() は前もって容量 (capacity) を確保しておくためのメンバ関数です。前もって容量を確保 (reserve) しておけば、データの追加時に発生する再割り当て (reallocation) を防ぐことができ、効率的です。 たとえば、何もしないで文字列に 1,000文字追加した場合、(内部的に倍々で容量を増やしていくため)10回程度の再割り当てが発生しますが、 s.reserve(1000) のように容量を確保しておけば 1回の割り当て (

    mattn
    mattn 2009/02/12
  • Re: [RFC] Convert builin-mailinfo.c to use The Better String Library.

    On Wed, 5 Sep 2007, Dmitry Kakurin wrote: > > When I first looked at Git source code two things struck me as odd: > 1. Pure C as opposed to C++. No idea why. Please don't talk about portability, > it's BS. *YOU* are full of bullshit. C++ is a horrible language. It's made more horrible by the fact that a lot of substandard programmers use it, to the point where it's much much easier to generate tot

    mattn
    mattn 2009/01/21