タグ

C++に関するsokutou-metsuのブックマーク (36)

  • C++ Patterns

    12345678910111213141516171819202122232425262728293031323334 #include <memory> class bar; class foo { public: foo(const std::shared_ptr<bar>& b) : forward_reference{b} { } private: std::shared_ptr<bar> forward_reference; }; class bar { public: void set_back_reference(const std::weak_ptr<foo>& f) { this->back_reference = f; } void do_something() { std::shared_ptr<foo> shared_back_reference = this->b

  • すごいConstたのしく使おう!

    Unity や MonoGame など、C# でゲームを作る環境が整ってきた昨今。メモリ?なにそれ美味しいの?という初学者が、難しいことを考えずにモノづくりができる一方で、メモリについて知らないとトラブルになることもあります。C#でゲームプログラムを書いたことがある、くらいの方を対象に、メモリとは何か、から、メモリリーク・ガベージコレクションの話、そしてガベージコレクションの回数を減らす実装方法について話します。

    すごいConstたのしく使おう!
  • Standard Template Library プログラミング on the Web

    1985年、AT&TのBjarne StroustrupがC++をこの世に送り出しました。その後C++は様々な拡張を繰り返しながら進化してきました。 1991年、ISOはC++の国際標準(standard C++)を定める作業を開始しました。標準C++の最終草案は1997年にISO C++標準化委員会に承認されました。 標準C++が規定するのは言語仕様だけなく、C++標準ライブラリも規格の中で明確に定められています。それまでC++のライブラリといえばiostreamぐらいのものでしたし、それもあくまで"事実上の標準"でしかありませんでした。 そしてそのC++標準ライブラリの一部として組み入れられたのがSTL(Standard Template Library)です。すなわちSTLは標準C++の仕様の一部ということです。 僕がSTLを知ったのは1995年、いくつかのコンパイラがtemplat

  • HowTo: Export C++ classes from a DLL

    The C++ programming language and Windows DLLs can live in peace after all. Download source - 11.1 KB Contents Introduction C Language Approach Handles Calling Conventions Exception Safety Advantages Disadvantages C++ Naive Approach: Exporting a Class What You See Is Not What You Get Exception Safety Advantages Disadvantages C++ Mature Approach: Using an Abstract Interface How This Works Why This W

    HowTo: Export C++ classes from a DLL
  • Clang の構文解析インターフェースを Python から叩いてみようという話

    iOS App 開発担当の松です。 Sleipnir for Mac をお試しいただいた皆様、ありがとうございます。まだの方は是非! さて、先日の記事にもあるように、Apple は LLVM を基盤とした開発環境を着々と整備してきています。今日は LLVM 関連ツールの中でも特に注目されている Clang で少し遊んでみたいと思います。 Clang は LLVM をバックエンドとした C/C++/Objective-C のコンパイラです。GCC に比べてコンパイルが速かったり、生成されたバイナリがより最適化されてたりと、色々と優れているのですが、中でも面白いのがコンパイル途中で生成される構文木に、アクセスする為のインターフェースが用意されている点です。Xcode ではお馴染みの「コード補完」や「リファクタリング」などの機能が、このインターフェースを利用して実装されていて、方法次第でかなり

    Clang の構文解析インターフェースを Python から叩いてみようという話
  • Google製のC++ Unit Test Framework「Google Test」を使ってみる

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    Google製のC++ Unit Test Framework「Google Test」を使ってみる
  • google-gtestのValue-Parameterized Testsが便利過ぎる件 - nobu-qの日記

    google-gtestにいつの間にかValue-Parameterized Tests(VPTと勝手に略します)という機能が追加されていました。 以前のgtestでは、実行される度に特定の値を変更しながらテストすることが面倒でした。例えば、boolのフラグを持っており、それがtrueかfalseかで挙動が変わるようなケースです。そのようなテストケースを書きたかったら、次のようにヘルパ関数を用意するか、テストをコピペして値を変更するなどの処理を書く必要がありました。 TEST(HogeTest, hogehoge) { hogeHelper(true); // trueでテスト hogeHelper(false); // falseでテスト }前者では問題が発生した時に異なるテストが同じ行番号を出力するため、問題の把握がしづらくなります。また、TESTがたくさんあった場合、それぞれにヘルパ

    google-gtestのValue-Parameterized Testsが便利過ぎる件 - nobu-qの日記
  • C++でテスト駆動開発

    Python をつかった FPGA 入門。Python 初心者でも大丈夫。関数が書ければすぐにできる。

    C++でテスト駆動開発
  • More C++ Idioms - Wikibooks

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

  • - デザインパターンによる進化的設計

    このプログラムでは全体の処理の流れが決まっています. その中で,youGotMailPopup()の部分のみの動作が変更できることが望まれています. ここで利用できるパターンを考えてみます.振舞に分類されるパターンのなか で,TemplateMethod と呼ばれるパターンがあります.GoFを参照すると, TemplateMethod 目的: 1つのオペレーションにアルゴリズムのスケルトンを定義しておき,そ の中のいくつかのステップについてはサブクラスでの定義に任せることにする. TemplateMethodパターンでは,アルゴリズムの構造を変えずに,アルゴリズ ムの中のあるステップをサブクラスで再定義する. とあります.今回の例では,全体の処理の流れを規定するrun()メソッドが上 記の「スケルトン」に当たります.また,youGotMailPopup()が「いくつかの ステップ」に当ては

    sokutou-metsu
    sokutou-metsu 2012/01/16
    C++でObserverパターンを実現するときに、キャストを回避する方法。
  • Observer パターン - My Life as a Mock Quant

    Observer パターン - Wikipedia 観察対象の状態が変化すると、観察者に対して通知される。Mediator パターンと良く似ているが、パターンの目的や視点は異なる。MediatorパターンではColleague役の間を取り持って、いろいろ処理を融通してやるために状態変化の通知が行われる一方、ObserverパターンではSubjectの状態変化をObserver役に通知すること、通知して同期をとることに主眼がある。同期するのか、受け取っていろいろ処理を回すのかの違いか? 以下コード、Person(Subject)がMessageObserver,AgeObserver(Observer)に年取る(GetOlder)度に更新通知を送ってる。ぐぅぅ、dynamic_cast使っちまった。 #include <iostream> #include<string> #include

    Observer パターン - My Life as a Mock Quant
  • Visutal Studio で Boost C++ Libraries をビルドする - Cube Lilac

    Visutal Studio で Boost C++ Libraries をビルドする必要が出てきたのですが,いくつか嵌った事があったのでメモ.まず,以下のサイトで Windows のバイナリが配布されているようです.バージョンは,3/23 現在で 1.44.0 とやや古い(最新バージョンは 1.46.1)ですが,手軽にインストールするならこれを利用する方法もあります. http://www.boostpro.com/download/ 今回は,バージョンが古いのと x64 バイナリを作成するためのライブラリも必要だったので自力でビルドする事にしました. bjam オプション Boost のビルド自体は,解凍したディレクトリで以下のコマンドを叩けば,基的には OK です. C:\code\boost_1_46_1> bootstrap.bat C:\code\boost_1_46_1>

    Visutal Studio で Boost C++ Libraries をビルドする - Cube Lilac
  • Deep C

    Programming is hard. Programming correct C and C++ is particularly hard. Indeed, both in C and certainly in C++, it is uncommon to see a screenful containing only well defined and conforming code.Why do professional programmers write code like this? Because most programmers do not have a deep understanding of the language they are using.While they sometimes know that certain things are undefined o

    Deep C
  • emit.jp - emit リソースおよび情報

    This webpage was generated by the domain owner using Sedo Domain Parking. Disclaimer: Sedo maintains no relationship with third party advertisers. Reference to any specific service or trade mark is not controlled by Sedo nor does it constitute or imply its association, endorsement or recommendation.

  • for_eachでメンバ関数を使う時の復習的自分メモ | hippos-lab::blog

  • const_cast の仕様 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    まあ調べたかったのは、const_cast して未定義動作になるのはどんな場合かってだけなんだけど、ある程度翻訳したので一応載せてみる。 式 const_cast(v) の結果は T である。もし T が lvalue reference 型か function 型への rvalue reference 型である場合、結果は lvalue だ。もし T が object 型への rvalue reference 型である場合、結果は xvalue だ。それ以外の場合、結果は prvalue で、lvalue-to-rvalue, array-to-pointer, function-to-pointer 標準変換が、式 v に適用される。const_cast を使って明示的に適用することができる変換は以下のリストの通りだ。それ以外の変換は const_cast を使用してもできない。 ノー

    const_cast の仕様 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
    sokutou-metsu
    sokutou-metsu 2011/09/15
    const_castの仕様和訳
  • gccにおけるatomic操作命令の個別関数

     gccとVC x86/x64環境で開発する上で, gccとVCはどちらも非常に優れたC/C++コンパイラです. ただLinuxWindowsのどちらの環境でも動作するようなC/C++コードを書くためには, gccとVC, およびそれらが動作するOSの違いが問題になることがあります. ここではそれらの違いについてまとめていきたいと思います. なお説明を簡単にするためにマクロを多用していますが実際には可能なら別の手段をとるか, 名前がぶつからないような命名規則に則ったマクロ名をつけることをお薦めします. 対象 定義済みマクロ 有用なマクロ コンパイルオプション 演算子の代替表現の抑制 日語のコメント 型 pragma attributeとdeclspec ファイル入出力 テキストとバイナリ 巨大なファイル static変数の初期化 snprintf 例外ハンドラ intrinsic関数

  • C++0x、満場一致でISO国際標準へ | マイコミジャーナル

  • 64ビットプログラミングのポイント

    従来の32ビット環境に慣れてしまったプログラマがしばしば犯してしまうミスを交えつつ、32ビット環境から64ビット環境へ移行する際に注意すべき代表的なC言語のプログラミング例を紹介しよう。(特集:64ビットコンピューティング最前線) C MAGAZINE 2004年10月号第3特集「64ビットコンピューティング」より転載 64ビット環境へ移行する際の注意点 ここでは、従来の32ビット環境に慣れてしまったプログラマがしばしば犯してしまうミスを交えつつ、32ビット環境から64ビット環境へ移行する際に注意すべき代表的なC言語のプログラミング例を紹介します。 もちろん、32ビット環境でプログラムを書いたことのないプログラマにも有用な情報です。 ポインタをint型やlong型変数に代入しない ポインタをint型やlong型変数に代入し、それを操作してはいけません。 アセンブラまたはインラインアセンブラ

    64ビットプログラミングのポイント
    sokutou-metsu
    sokutou-metsu 2011/08/01
    64ビット移行
  • 関数オブジェクト(後編)

    (このコンテンツはメールマガジンの STL & iostream 入門に手を加えたものです。「 STL と iostream が使えるかのチェック」等はメールマガジンの方のページをご覧ください) 関数オブジェクトが役立つのは、アルゴリズムを「クラスの配列」に使用する場合です。既存のクラスを使用する場合、アルゴリズムが使用する演算子を持っていないことがほとんどです。例えば次のようなクラス。 class CNoOperator { public: int m_i; }; このクラスは int 型のメンバ変数を持っていますが、この変数に = などで直接アクセスすることはできません。ピリオド( . )を使ってメンバとしてアクセスする必要があります。なので、このクラスの配列は == 演算子を使用する std::count() には使用できません。 こういう場合には関数オブジェクトが有効です。たとえば

    sokutou-metsu
    sokutou-metsu 2011/07/07
    STLの関数オブジェクト