タグ

C++に関するono_matopeのブックマーク (54)

  • C++11時代のthreading - fjnlの生存記録のような何か

    始めに 記事は C++11 Advent Calendar 2011 : ATND の6日目です。 std::thread C++11時代のthreadの基は std::thread です。おもむろに #include をしましょう。std::threadはコンストラクタで渡された関数オブジェクトを別スレッドで実行します。 #include <iostream> #include <thread> void f() { std::cout << "f()" << std::endl; } int main() { std::thread thr(f); thr.join(); return 0; } このプログラムを実行すると f() と表示されるはずです。コンパイルして実行してみます。 $ g++ -o thr thr.cpp -std=c++0x $ ./thr f() $ 確かに

    C++11時代のthreading - fjnlの生存記録のような何か
    ono_matope
    ono_matope 2014/01/12
    スレッドでの例外とfuture
  • モダン C++ プログラミング - 日本語公開記事 - Confluence

    このドキュメントはサイボウズ社内のトレーニング用に作成したものです。 作成時点では C++11 はまだあまり利用できない状況でしたので、C++98 ベースの記述になっています。 いずれ更新を予定しています。 モダンの定義モダンとはテンプレートメタプログラミング(TMP)を駆使することです。嘘です。 宗教論争に意味はないので、ここでは 「最近の C++ の仕様・機能を理解し、C より実装効率が良く不具合の少ない」 プログラミング技法を「モダン C++ プログラミング」と定義します。 つまり、不具合が少なく、かつ C にはもう戻れなくなるような効率の良さを達成するものです。 学習効率(ROI)が極めて良くないような技法(例えば TMP)は、この定義では除外されます。 勉強方法お勧めの順序は以下。決して全部を読もうとしないこと。 C++ Language Tutorial のような、あっさりした

  • C++ Driver for Cassandra Open Sourced! | Datastax

    I'm glad to announce that we open source today our C++ Driver for Apache Cassandra, following our plan to bring a simple and modern API for Cassandra to major programming languages. Just like our Java Driver, C# Driver and Python Driver, this C++ Driver targets Cassandra 1.2+ as it's designed for CQL and the CQL Binary Protocol. It's based on the original work of Matt Stump on libcql. As Matt has

    C++ Driver for Cassandra Open Sourced! | Datastax
  • POCO C++ Libraries

    About Why POCO? Testimonials License Support Contributors How To Contribute Donations Spread The Word! SF Project Page The POCO project is sponsored by Applied Informatics provides consulting, training, professional support and additional libraries for POCO. POCO C++ Libraries: About "Without a good library, most interesting tasks are hard to do in C++; but given a good library, almost any ta

    ono_matope
    ono_matope 2013/07/19
    ぽこ。
  • バイトをはじめることにした

    そろそろ費にすら事欠くようになったのでバイトをすることにした。一日数時間の掃除だ。おそらく、C++の執筆にはさほど影響しないだろう。 結局、結果からいえば、当初の目論見であった、貯金の続くうちに、全力でC++を完成させるというのは、無理だったわけだ。やれやれ、最初から働きつつ執筆すべきだったのか。 C++は、ようやくオーバーロード演算子まで進んだ。といっても、途中のBasic Conceptsに当たる部分は飛ばしたし、コピーとムーブも飛ばした。コピーとムーブはどう書けばわかりやすくなるのか分からない。純粋なコア言語機能だけ説明してもわかりにくいし、かといって、プログラミングテクニックまで説明するのは書の範疇ではないように思う。コア言語に絞ってさえこの分量なのだから、最初の壮大な野望通り、標準ライブラリまで手を広げようと思ったら、いつまでかかるか分からない。 そもそも、一冊のまとま

  • Linux愛好者の独り言 Cutterのとても簡単な使い方

    Linux愛好者の独り言」は,Linuxやプログラミングの,楽しさや初心者向け情報を配信するBLOGです。 CutterはC/C++用の単体テストユニットフレームワーク(所謂xUnit)だ。 評判が良いので,以前から使いたかったのだが,いかんせん,家のチュートリアルが丁寧すぎてわかりにくく,使い方がわからなかった。 このチュートリアルでは,automake等を用いた格的な使い方が書かれているので, てっきりCutterを使う時はいつもこのくらいの準備が必要なのかと思っていた。 ほんのちょっと,テストコードを書いて開発の補助にしたいだけなのに,いちいちMakefile.amだのconfigure.acだのを作るのは面倒だ。 (これが面倒でない人間はIDEなんて使わないだろう) 毎度,このチュートリアルに従うくらいなら,cxxTestでもを使うほうがましだと思った。 だが,どうやら,

    ono_matope
    ono_matope 2011/11/16
    ほう
  • Easy check for unresolved symbols in shared libraries?

  • Making gcc resolve symbols at link-time

  • undefined reference to `vtable...の対処 - 三次元日誌

    こんなエラーが出た ../opengl/debug/libgldriver.a(opengl.o):opengl.cpp:(.text$_ZN6opengl5JointD1Ev[opengl::Joint::~Joint()]+0x3a): undefined reference to `vtable for opengl::Joint' こうなっていたのを class IJoint { 省略(virtualのインターフェースを宣言している) }; class Joint : public IJoint { 省略 }; ↓ ベースクラスのほうに追加する class IJoint { // opengl::Joint::~Joint()のエラー virtual ~IJoint(){} }; と追加したらなおった。 どういう基準で必要になるのかよくわからないが対処として。 もうひとつの罠 単に

    undefined reference to `vtable...の対処 - 三次元日誌
  • C++11のコーディング変更点まとめ | エンタープライズ | マイコミジャーナル

    C++ is one of the most popular programming languages. 次世代のC++規格「C++11」が国際標準として発行された。多くのC++デベロッパは、この新しいC++規格で提供される新機能に関心があると思うが、仕様書を読むのは骨が折れるとためらっている方も少なくないだろう。 そんなデベロッパの皆さんに朗報だ。C++11の登場で通常のC++コーディングとライブラリデザインなどに強く影響を与えるとみられる変更がBjarne Stroustrup氏の記事「Elements of Modern C++ Style」にまとめられている。C++98と比べて特に見た目の変更が大きく、かつ、今後広く使われ新しいコーディングスタイルになりそうなものが紹介されており、C++11新機能を知るための導入ドキュメントとして役に立つ。 紹介されているC++11の新機能を簡単

    ono_matope
    ono_matope 2011/11/04
    モダン~
  • ヘッダファイルでの定義と分割コンパイル - Cube Lilac

    ヘッダファイルに関数などの(宣言ではなく)定義を記述している場合の,分割コンパイルを行ったときの挙動をイマイチ把握していなかったので整理してみました. C/C++ では,多重定義エラーを防ぐために,ヘッダファイルを記述するときにはインクルードガードと呼ばれるテクニックを使用します.ですが,インクルードガードはコンパイル単位内でのみ有効なテクニックであるため,複数のソースファイルを分割コンパイルする場合には,以下のように多重定義エラーとなる問題が発生します. hello.h #ifndef HELLO_H #define HELLO_H #include <iostream> extern void proxy(); void hello() { static int count = 0; std::cout << "Hello, world! (called: " << count <<

    ヘッダファイルでの定義と分割コンパイル - Cube Lilac
    ono_matope
    ono_matope 2011/11/02
    ソースファイルまたぐとインクルードガードって意味なかったのか…
  • GCCの__builtin_return_addressを使ってカジュアルにバックトレース - 空想犬猫記

    仕事Windows上のバックトレースを取得するStackWalk関数周りを調べていて、ふとMacOSXではどうやるのか気になったのでやってみました。 Leopard以降では、そのものズバリ backtrace()、backtrace_symbols()という関数があり、またC++限定であれば、例外処理のための実装である_Unwind_Backtrace()という関数が使えるようです(参照)。 ここで紹介するのは、あまりバイナリハック的なことをせずに、C/C++でカジュアルにスタックのバックトレースを取得する方法です。カジュアルなぶん、環境にかなり依存すると思われます。テストした環境はMacOSX 10.4.11 (PPC) です。 原理はとても単純で、以下の3ステップです。 __builtin_return_address() 関数を使って、関数の戻るポインタを取得する。 引数を1,2,

    GCCの__builtin_return_addressを使ってカジュアルにバックトレース - 空想犬猫記
    ono_matope
    ono_matope 2011/10/29
    backtrace()以外のバックトレース手法
  • More C++ Idioms - Wikibooks, collection of open-content textbooks

    C++ has indeed become too "expert friendly" -- Bjarne Stroustrup, The Problem with Programming, Technology Review, Nov 2006. Stroustrup's saying is true because experts are intimately familiar with the idioms in the language. With the increase in the idioms a programmer understands, the language becomes friendlier to them. The objective of this open content book is to present modern C++ idioms to

    More C++ Idioms - Wikibooks, collection of open-content textbooks
    ono_matope
    ono_matope 2011/10/28
    More C++ Ideoms(原著)。未翻訳のものはこっち。
  • More C++ Idioms - Wikibooks

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

    ono_matope
    ono_matope 2011/10/28
    宝の山だ
  • More C++ Idioms/リソースの返値(Resource Return) - Wikibooks

    [編集] 意図[編集] (リソースの)所有権移動を、ファクトリ関数の返値の型によって明示的に表明する。 別名[編集] 動機[編集] 新しいリソースを作成し呼び出し元に返すために、しばしばファクトリ関数が使われる。 新しいリソースは、生のメモリや、動的に割り当てられたオブジェクト、データベースのカーソルや接続、ロックといったものになりうる。 誰がリソースを所有し、誰がリソースを解放するかは、リソースに関する重要な質問である。 呼び出し元がリソースの解放に対して暗黙的に責任を持つようなインタフェースが作成されることがよくある。 この点に呼び出し元が気づいていない場合、あるいは、正しい手順をとるのを忘れていた場合、簡単に誤用される類のインタフェースになってしまう。 以下のコード断片のような例である。 struct X { void foo() {} }; X * Xfactory() // リソ

    ono_matope
    ono_matope 2011/10/28
    リソースを返す関数はauto_ptrで返却すればリソースの所有権の移動が明示的で良いという話
  • More C++ Idioms/仮想コンストラクタ(Virtual Constructor) - Wikibooks

    [編集] 意図[編集] あるオブジェクトのコピーか、新しいオブジェクトを、その具体的な型を知ることなしに生成する。 別名[編集] 初期化におけるファクトリメソッドの使用 動機[編集] クラス階層中のメンバ関数の多態的な呼び出しを使うことは、オブジェクト指向プログラミングのコミュニティではよく知られたことである。 それは、is-a(~は~である) 関係 (より現実的に言えば behaves-as-a(~として振る舞う)関係)を実装する方法の一つである。 クラス階層中の生存期間管理(生成、コピー、破棄)関数を多態的に呼び出すことも場合によっては便利である。 C++ は、仮想デストラクタによってオブジェクトの多態的な破棄に(言語組み込みの機能で)対応しているが、 オブジェクトの生成やコピーに対しては同様のものは存在しない。 C++ では、オブジェクトの生成には常にその型をコンパイル時に知っている

    ono_matope
    ono_matope 2011/10/28
    コンストラクタがvirtualにできないならファクトリメソッドを使えばいいじゃない的な解決!
  • エラー処理とログ出力

    ソフトウェアの開発において、エラー処理は、時には来の機能よりも重要です。業務として開発するソフトウェアでは、来の処理を行うためのコードよりも、エラー処理のコードの方が量が多くなることも良くあります。 ところが、実際のソフトウェアの開発では、エラーをどこでどのように出力するかについては、実装者任せになってしまうことが多いようです。ソフトウェア設計書を見ても、エラーの出力については記述されていないことも良くあります。実装が終わってから、最後に慌しくエラーの出力を組み込むこともあります。 エラー処理について考えてみると、たくさんの難しい問題があることが分かります。これらの問題を理解した上で、きちんとエラー処理の仕組みを考えないと、ソフトウェアの設計や品質にも、重大な影響が及ぶかもしれません。 エラー処理とログ出力は、来、どのようにして行うべきなのでしょうか。 エラーを知らせる仕組み ソフト

    ono_matope
    ono_matope 2011/10/21
    "エラー処理がオブジェクト指向設計を破綻させる" 難しいなあ。
  • 自動ビルド環境とHudson - torutkのブログ

    「継続的インテグレーション」ツールHudsonを使った最初の一歩です。新しいツールは使いはじめるのに敷居があるので、Hudsonにおける敷居を越える参考にと日記をしたためてみました。 前置き 現在のプロジェクトでは、毎週リリースを行っているのですが、有人作業のため、作業を開始してビルドエラーが発生すると、そのたびに関係者を聞きまわって調整して、という作業が入ります。 ビルドの自動化(定期化)は、当初からの出来たらいいなリストに挙げられていますが、手が回らずに後回しになったまま現在に至っています。試験作業のウェイトが増えてきた時期に、ビルド専任者が外され、ますます手が及ばなくなってしまいました。リリース作業が大事になってくるプロジェクト終盤ですが、予算的要因のためいる人間で何とかしろと・・・(大規模だ〜といいながら、ビルド担当、構成管理担当が専任化されない・・・)。 ビルドの自動化で思いつく

    自動ビルド環境とHudson - torutkのブログ
    ono_matope
    ono_matope 2011/09/13
    Hudson、C++でも使えるんだ。
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    ono_matope
    ono_matope 2011/08/02
    そういえば使ったことないな
  • C++ の std::vector に v += 3, 1, 4 で push_back - てっく煮ブログ

    c++boost::assign使ってみた - Faith and Brave - C++で遊ぼう にて boost::assign の使い方が紹介されていた。 #include #include #include #include using namespace std; using namespace boost::assign; int main() { vectorint> v; v += 3, 1, 4; // !!! for(unsigned int i = 0; i return 0; } おおおおお、なんかすごい…!普通なら v.push_back(3); v.push_back(1); v.push_back(4); と書かなきゃならないところを v += 3, 1, 4; と書ける。自分の C++ の常識からするとびっくりするような書き方なのだけど、C++ では

    ono_matope
    ono_matope 2011/08/02
    こういう仕組みだったのかー