タグ

c++に関するnitoyonのブックマーク (113)

  • モダン C++ プログラミング - 日本語公開記事 - Confluence

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

    nitoyon
    nitoyon 2013/12/19
  • C における一時オブジェクトの生存期間 | Yak!の日記 | スラド

    Twitter 上で C++ STL の vector に関して評価順序不定ではまっているコードの例が流れていてそこから C 言語における(規格上の)落とし穴に行き着いたのでメモ。 // from http://www.jpcert.or.jp/sc-rules/c-exp35-c.html #include <stdio.h> struct X { char a[6]; }; struct X addressee(void) { struct X result = { "world" }; return result; } int main(void) { printf("Hello, %s!\n", addressee().a); return 0; } 上記コードは C++ では問題ないコードであるが、一方 C99 では未定義動作を含むコードである。理由はJPCERT のページに記述

    nitoyon
    nitoyon 2011/10/16
    CとC++の一時オブジェクトの生存期間の違い。
  • 動的削除子 (dynamic deleter) - 意外と知られていない? boost::shared_ptr の側面 - Cry’s Diary

    boost::shared_ptr は動的削除子 (dynamic deleter) と呼ばれる技法に基づいて実装されています.この動的削除子という技法で重要なのは, boost::shared_ptr が最終的に呼び出す解放処理が boost::shared_ptr のテンプレート引数の型に関係なく,コンストラクタに実際に渡されたポインタの型で,かつ boost::shared_ptr のコンストラクタの呼び出しの段階で 決定する,ということです. 以下のようなコードが,動的削除子の効果が一番分かりやすい例になるでしょう. class X{ public: ~X() { std::cout << "X::~X" << std::endl; } }; class B{ public: ~B() // virtual でないことに注意!! { std::cout << "B::~B" <<

    動的削除子 (dynamic deleter) - 意外と知られていない? boost::shared_ptr の側面 - Cry’s Diary
    nitoyon
    nitoyon 2011/10/10
    動的削除子 (dynamic deleter)。new するタイミングで deleter を作成することで、shared_ptr<T> の宣言時には不完全型でよいようにする。
  • Boost.勉強会#4で「ゲーム開発のC++」を話してきました - 神様なんて信じない僕らのために

    とりま、 アップロードしました。 スタッフの皆さん、参加者の皆さんお疲れ様でした。 アキラさんには直前まで資料作っていてご心配をおかけいたしました。orz... Boost study#4View more presentations from Isoparametric !.

    Boost.勉強会#4で「ゲーム開発のC++」を話してきました - 神様なんて信じない僕らのために
    nitoyon
    nitoyon 2011/02/27
    ゲーム開発のC++。ゲームならではの苦労。
  • Cのコールバック関数をC++のメンバ関数にバインディングする方法 - kazuhoのメモ置き場

    たとえば libevent のような C 言語でかかれたイベント駆動型のライブラリを C++ から使っていると、C++ のメンバ関数をコールバックとしてセットできたらうれしいことが多いですよね。以下のようにすればできます。 たとえば、コールバック関数をセットする関数の型が、 void set_foo_callback(void (*)(void* cb_arg), void* cb_arg); なら、以下のようにクラスとメンバ関数を引数にとるテンプレート関数を定義し、 template <typename T, void (T::*FUNC)()> void to_foo_callback(void* cb_arg) { T* obj = reinterpret_cast<T*>(cb_arg); (obj->*FUNC)(); }以下のように受け渡せばいい。 class K { publ

    Cのコールバック関数をC++のメンバ関数にバインディングする方法 - kazuhoのメモ置き場
    nitoyon
    nitoyon 2011/02/03
    オブジェクトとポインタを渡してオブジェクトのメソッドをコールバックさせるテンプレート関数。
  • 人の話を聞かない人の V8 エンジン。 V8 を C++ に組み込んで遊ぼう - お前の血は何色だ!! 4

    C++ Advent Calendar です。 google の V8 engine を 組み込んで簡易スクリプトにしてしまおうという話です。 C++の言語仕様や boost の話は超絶詳しい人たちがされているので、誰もやらなそうな ぬるいいい加減な話をします。 #間違ってたら突っ込みよろしく!! なぜ V8? Lua ぢゃだめなんですか? C++ から呼び出しやすい 組み込み言語として、 Luaがあります。 しかし、 Luaはコメントが -- から始まったり、 〜end と、 C / C++ に組み込みやすいスクリプト言語なのになぜか pascal チックな文法?という不思議なところがあります。 やはり、 C++ ユーザとしてはコメントは // で書きたいし、ブロックは { } でやりたいですよね (y/Yes) そんなところに、 google の V8 engine があります。 C+

    人の話を聞かない人の V8 エンジン。 V8 を C++ に組み込んで遊ぼう - お前の血は何色だ!! 4
    nitoyon
    nitoyon 2010/12/16
    Visual C++ のコンソールアプリで V8 エンジンを使う。
  • クリエイティブなC++ライブラリ "Cinder" の紹介 - Preferred Networks Research & Development

    こんにちは、人恋しい季節になってきましたね。 研究開発チームの祢次金(@nejigane)と申します。 エントリではCinderというクリエイティブなコーディング向けのライブラリについてご紹介したいと思います。 Cinderとは Cinderとは、画像、音声、動画等を簡単に処理&可視化できる、主にビジュアルデザイン向けの強力なC++ライブラリであり、The Barbarian GroupのAndrew Bell氏が中心となってオープンソースとして開発が進められています。 同様の思想を持つProcessingやopenFrameworksによく似ており、C++で簡単に記述できるうえ、WindowsMacOSX、iOS(iPhone/iPad)といった複数のプラットフォームをカバーしています。 細かい機能/特徴の紹介は家サイトに譲るとして、Cinderを極めるとどのぐらいクリエイティブな

    クリエイティブなC++ライブラリ "Cinder" の紹介 - Preferred Networks Research & Development
    nitoyon
    nitoyon 2010/11/21
    ビジュアルデザイン用の C++ ライブラリ Cinder。
  • 開発メモ: 50行のC++コードでWebサーバを実装する

    「Kyoto Tycoonの設計 その四」改め、50行でWebサーバを書く方法を解説する。前回実装した「多重I/Oマルチスレッド汎用TCPサーバ」の上にHTTPの処理を行う層をつけて、「多重I/Oマルチスレッド汎用HTTPサーバ」を司るクラスを実装してみたので、それを使ってちょちょいとやる。 URLクラス HTTPと言えばURLが使えないと意味がない。URLは単なる文字列として扱ってもよいのだが、様々なシーンで分解や加工が必要になり、その処理はなにげに複雑で面倒なので、予めクラスとして導出しておいた方がよいだろう。 class URL { public: // 文字列のURLを解析して内部構造を作る void set_expression(const std::string& expr); // スキーム要素を設定する void set_scheme(const std::string&

    nitoyon
    nitoyon 2010/09/20
    自前ソケットライブラリ上につくった多重I/Oマルチスレッド汎用TCPサーバを利用して HTTPD を作る。マルチスレッド ネットワーク プログラミングの参考に。
  • Google Code Archive - Long-term storage for Google Code Project Hosting.

    Code Archive Skip to content Google About Google Privacy Terms

    nitoyon
    nitoyon 2010/09/12
    関数をスコープ内で置き換えるC++フックライブラリ sexyhook の内部実装を解説。マクロでフック用クラスを定義、関数内にjmp埋め込み、呼び出し規約対応、ジャンプテーブル(ILT)・vcall 対応、Win32 API は API フックを利用。
  • #include の魔力 - Cube Lilac

    何気なく呟いた言葉が確変状態になっていました。 それで、反応を眺めていると「何をやってるか分からない」と言うものがいくつかあったので、一応簡単な補足説明を載せておきます。 #include は指定したファイルの内容をその位置に追加します。 1, 2, 3, 4, 5, 6, 7, 8, 9,例えば、上記の内容を hoge.csv と言う名前で保存して、 int hoge[] = { #include "hoge.csv" }; と記述すると、(プリプロセスが終了すると)以下のように記述した事と同じになります*1。 int hoge[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, }; このように、#include を利用することによって、内容が変化しない*2データ配列などの定義を自力で打ち込んだりコピペしたりせずに済むようになります(なることがあります)。s/int/co

    #include の魔力 - Cube Lilac
    nitoyon
    nitoyon 2010/09/09
    #include で CSV を配列として取り込む(行末に , が必要)。
  • Boost.勉強会 #3 関西 - Faith and Brave - C++で遊ぼう

    Boost.勉強会 #3 関西 - こくちーず Boost.懇親会 #3 関西 - ATND 参加募集開始しました。 スピーカーも募集中です。id:Cryoliteさんとかid:Cryoliteさんとかid:Cryoliteさんとか。

    Boost.勉強会 #3 関西 - Faith and Brave - C++で遊ぼう
    nitoyon
    nitoyon 2010/09/07
    Boost.勉強会
  • August 25, 2004

    nitoyon
    nitoyon 2010/08/29
    FILETIME 構造体のアラインメント問題。x64 環境で __int64 や LARGE_INTEGER にキャストすると EXCEPTION_DATATYPE_MISALIGNMENT 例外が発生することがある。
  • Code Sample from Microsoft

    すべての Microsoft 製品 Global Microsoft 365 Teams Copilot Windows Surface Xbox セール 法人向け サポート ソフトウェア Windows アプリ AI OneDrive Outlook Skype OneNote Microsoft Teams PC とデバイス Xbox を購入する アクセサリ VR & 複合現実 エンタメ Xbox Game Pass Ultimate Xbox Live Gold Xbox とゲーム PC ゲーム Windows ゲーム 映画テレビ番組 法人向け Microsoft Cloud Microsoft Security Azure Dynamics 365 一般法人向け Microsoft 365 Microsoft Industry Microsoft Power Platform W

    Code Sample from Microsoft
  • StringPiece というライブラリの話 - 兼雑記

    例えばこう、ディレクトリの名前とその中のファイル名を / でくぎって結合する関数を書くとします。引数が std::string でも使いたいし const char* でも使いたい、ということで、たいていは void JoinFilePathStr(const string& dir, const string& base, string* out) { out->clear(); out->append(dir); out->push_back('/'); out->append(base); }なんてのを書くんじゃないかと思います。この関数で問題になるのは const char* を渡すと不要な string object が一度できることで、敬虔な C++ 屋さんだと、 void JoinFilePathStr(const string& dir, const char* base,

    StringPiece というライブラリの話 - 兼雑記
    nitoyon
    nitoyon 2010/08/24
    std::stringとconst char*を透過的に使うためのクラス StringPiece。
  • Are there gotchas using varargs with reference parameters

    nitoyon
    nitoyon 2010/08/16
    可変長引数(va_list)の手前に参照(リファレンス)渡しするとうまくいかない問題。C++ standard (18.7)に注意書きあり。
  • virtualを「仮想」と訳していいものか - やねうらおブログ(移転しました)

    私は「virtual」を「仮想」と訳すのにすごく抵抗がある。 「virtual」って英語来の意味は、「実質上の」「実際上の」というような意味だ。「表面的にはそうではないが実質的にはこれなんだ」というような時に使う。 「virtual memory」を「仮想記憶」と訳すと「実際は存在しないメモリ」であるかのように思える。現実的に存在しないのなら無くても構わないようにすら思える。確かに物理的には存在しないから実在はしないんだけど、かと言って不要というわけでもなく、「virtual memory」来の意味は「(ユーザーアプリなどが)実際に使うときのメモリ」みたいなニュアンスで「無くても構わないメモリ」とは、ちょうど真逆の意味だ。 「仮想」という言葉が、「存在しない」という否定っぽい語感なのに対して、「virtual」来の意味は「実質上(は、これだ)」という肯定っぽい意味だからどうもギャップ

    virtualを「仮想」と訳していいものか - やねうらおブログ(移転しました)
    nitoyon
    nitoyon 2010/08/03
    virtual は「表面的にはそうではないが実質的にはこれなんだ」という意味。コメント欄に virtual を「仮想」と訳した人の話もあり。
  • ビットを数える・探すアルゴリズム

    作成日:2004.05.04 修正日:2012.09.01 このページは 2003年の9/11、9/28 の日記をまとめて作成。 はじめに PowerPC 系や Alpha などには population count と呼ばれるレジスタ中の立っているビット数を数える命令が実装されている。 集合演算を行うライブラリを実装したい場合などに重宝しそうな命令である。 職場でこの population count 命令について話をしているうちにビットカウント操作をハードウェアで実装するのは得なのか?という点が議論になった。 CPU の設計をできるだけシンプルにするためには、複雑で使用頻度の低い命令は極力減らした方がよい。 例えば SPARC は命令セット中にビットカウント演算があるが、CPU 内には実装しないという方針をとっている(population 命令を実行すると不正命令例外が発生し、それを

    nitoyon
    nitoyon 2009/11/08
    ビット数を数えるアルゴリズムいろいろ。bits &= bits - 1、0x55555555や0x33333333とのAND(Hacker's Delightより)
  • Visual Studioのデバッガ使うとWindowsごとしばしば固まる件について - 新ねこら対策秘密力要塞基地日誌

    19 名前:デフォルトの名無しさん[sage] 投稿日:2007/01/03(水) 20:25:25 前スレ >>984 何度か出てるけどコンパネの 「地域と言語のオプション」−「言語」−「テキストサービスと入力言語」−「詳細」− 「詳細設定」−「詳細なテキストサービスをオフにする」 にチェックを入れるとフリーズは改善する可能性が高いよ。 マルチスレッド周りでデバッグ中に固まる一因が、「詳細なテキストサービス」らしいから そうなのか。 http://support.microsoft.com/default.aspx?scid=kb;ja;898663 http://support.microsoft.com/kb/282599/JA/ http://questionbox.jp.msn.com/qa4281023.html のだった。

    Visual Studioのデバッガ使うとWindowsごとしばしば固まる件について - 新ねこら対策秘密力要塞基地日誌
    nitoyon
    nitoyon 2009/09/19
    マルチスレッドなアプリのデバッグでVC++がCPU消費しまくってフリーズする問題。「IMEの詳細なテキストサービス」をオフにすると固まらなくなる。←いままで頑張ってdevenvを強制終了させていた...
  • 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

    nitoyon
    nitoyon 2009/07/31
    軽量(40KB)HTTPDライブラリ、組み込み簡単。Win32/MacOS対応。SSL/CGI/SSI/IP認証/BASIC認証サポート。MITライセンス。C/C++, Python, C# をサポート。
  • アンマネージ・コードの型情報と連携する(1/2) - @IT

    C#やVisual Basicなどのコードからアンマネージ・コード(ネイティブ・コード)を呼び出すための「P/Invoke(Platform Invoke、プラットフォーム呼び出し)」には定型作業が多い。例えばC/C++用のマクロ定数は、C#ではenum型として扱いたいところだ。これには例えば次のような書き換えが必要になる。 #define PAGE_NOACCESS          0x01 #define PAGE_READONLY          0x02 #define PAGE_READWRITE         0x04 #define PAGE_WRITECOPY         0x08 (以下略)

    nitoyon
    nitoyon 2009/07/22
    P/Invokeの作成を自動化する「P/Invoke Interop Assistant(http://www.codeplex.com/clrinterop/)」を紹介。自前パーサーでがんばっているらしい。