c++に関するpknightのブックマーク (83)

  • HRESULT型の判定にSUCCEEDEDやFAILEDは使えない(ことがある)(dinop.com)

    解説 COMインターフェースは結果をHRESULT型で返すことが多い。しかしその戻り値を単純にFAILEDやSUCCEEDED マクロを使って判定すると実行時に例外などのエラーが発生することがある。 それは失敗時にS_FALSEを返す関数があるためだ。この値はSUCCEEDEDマクロでTRUE、FAILEDマクロでFALSE となる「成功」タイプの値だ。成功とは言うもののFALSEという微妙な値になっている。 BOOL型でも同じような問題がある。BOOLの場合はif(ret == TRUE)は正常に判定できないことがあるので if(ret != FALSE)やif(ret)のように成功判定をする。しかしHRESULT型の場合は単純にif(!FAILED(hr))の ようには解決できない。 HRESULT関連の実装 HRESULT型でよく使われるS_OKやSUCCEEDEDマクロなどはヘッダ

  • s8 u8 s16 u16 s32 u32 s64 u64 の型とは? | UNIXとプログラムとゲーム

    /* * These aren’t exported outside the kernel to avoid name space clashes */ #ifdef __KERNEL__ #define BITS_PER_LONG 32 #ifndef __ASSEMBLY__ typedef signed char s8; typedef unsigned char u8; typedef signed short s16; typedef unsigned short u16; typedef signed int s32; typedef unsigned int u32; typedef signed long long s64; typedef unsigned long long u64; /* DMA addresses come in generic and 64-bit

    pknight
    pknight 2010/04/27
    types.h
  • std::auto_ptr

  • C++ Labyrinth

    マルチスレッドにおける singleton singleton パターンというのは、あるクラスのインスタンスが、プログラム全体の中で、 ただ一つだけ存在するように制限したいというような場合に用いられる。たとえば、 MFC を使った Windows プログラミングでは、しばしば、 といったコードにお目にかかるが、このやり方では、他の誰かが、CFooApp の 別のインスタンスを作ることを明示的に禁止することはできない。 では、どうするか。すぐに思いつくのは、インスタンスの生成をただ一つの 関数だけに許可し、数の管理は、その関数に任せる、というやり方である。 インスタンスの生成をただ一つの関数だけに制限するには、クラスの コンストラクタを private にした上で、その関数を、クラス内の静的メンバ関数に するか、あるは、クラスのフレンド関数にすればよい。 class Foo { public

    pknight
    pknight 2010/04/24
  • シングルトンまとめ

    普通のC++使い、銀天すばる @SubaruG singleton は shared_ptr を使うべきか否か。…うん、冗長だねー。リークしない保証は素敵だけど。 2010-04-23 22:44:06

    シングルトンまとめ
    pknight
    pknight 2010/04/24
  • Singleton デザインパターンとかポインタとか - 野良C++erの雑記帳

    何回かコメントを書かせてもらった、 Singletonクラスにauto_ptrを使うのは案外難しい - (void*)Pないと こちらの話題。 「auto_ptrからFooを破棄されるかもしれないじゃない」とのことですが、 これは一応 std::unique_ptr を使うことで回避できます(要 C++0x 対応コンパイラ): #include <iostream> #include <memory> // 好みの書き方に書き直してるけど基的には変わらない。 class Foo { typedef Foo self_type; public: static self_type* getInstance() { if( !instance_ ) { instance_.reset( new self_type ); } return instance_.get(); } // ただ、それだ

    Singleton デザインパターンとかポインタとか - 野良C++erの雑記帳
    pknight
    pknight 2010/04/24
  • stringstreamの罠 - C/C++サンプル

    stringstreamの使いかたはcoutと同様に「 1: #include<iostream> 2: #include<sstream> 3: 4: using namespace std; 5: 6: int main( int argc, char **argv ) 7: { 8: stringstream ss; 9: 10: for( int i=0; i<10; i++ ){ 11: ss << "sample" << i << ".dat"; 12: cout << ss.str() << endl; 13: } 14: 15: return 0; 16: } 「sample0.dat」「sample1.dat」...「sample9.dat」と1行ずつ表示させたいわけだが、これを実行するとどうなるかわかるだろうか?実行結果は以下の通りである。 sample0.da

    pknight
    pknight 2010/04/07
  • C++ Reference Project

    C Library The elements of the C language library are also included as a subset of the C++ Standard library. These cover many aspects, from general utility functions and macros to input/output functions and dynamic memory management functions: <cassert> (assert.h)C Diagnostics Library (header)<cctype> (ctype.h)Character handling functions (header)<cerrno> (errno.h)C Errors (header)<cfenv> (fenv.h)F

  • Boost.勉強会のまとめとか感想とか今後についてとか - Faith and Brave - C++で遊ぼう

    Boost.勉強会 - ATND 12/12(土)にグリー株式会社様のセミナー会場をお借りして Boost.勉強会を開催しました。id:sotarokさんありがとうございました! 【発表のまとめと感想】 ・Boostライブラリ 一周の旅(id:faith_and_brave, @cpp_akira) Boost 1.40.0に含まれるライブラリのうち、74ライブラリを紹介し、 それに加えて「一分でわかるテンプレートメタプログラミング」というのを話しました。 (1分以内には終わらなかったのと、もうちょっとじっくりやりたかったです。) 今回の勉強会ではじめてBoostを知った、という方にはBoostを使い始めるきっかけと なっていただければ幸いです。 反省点としては、1時間セッションの予定が気づいたら40分もオーバーしてしまっていたことですね。 解説するライブラリが74個もあったというのはあり

    Boost.勉強会のまとめとか感想とか今後についてとか - Faith and Brave - C++で遊ぼう
  • typeidと計算コスト - OKWAVE

    今、以下のようなクラスの関数を作っているのですが、typeidはプログラム実行時に実行される関数という扱いなのでしょうか? それとも、コンパイル時に実行されるマクロ関数的な扱いのものなのでしょうか? もし、プログラム実行時に実行されるなら、コンパイル時にTTの種類によって内容をコンパイルする内容を変更すると言うことは不可能でしょうか? また、どうしても、プログラム実行時にしかできないのならと考え、 type_info ty=typeid(TT) と、代入してから判定してみようかとやってみたのですが、「error C2248: 'type_info::type_info' : private メンバ (クラス 'type_info' で宣言されている) にアクセスできません。」と表示され無理なようでした。 何か良い方法はないものでしょうか? template<class TT> class

    typeidと計算コスト - OKWAVE
    pknight
    pknight 2010/03/26
  • いきちがいのぷろぐらむあ - FrontPage -    

    2016-11-19[土] C++TemplateのつもりでC#Generics使ってハマる(初歩) 人様のソース改修でロクに知らないC#をここ1,2ヶ月さわってた。 といってもそのソースもC#慣れしたわけでないC系ユーザーが書いたような感じで ある意味助かったのだけれど、コピペ膨れなソースだったので、処理をまとめようと C++Template 的に Generics を使おうとして...ちょっとハマった。 C++だと #include <stdio.h> class Foo { public: void Run() { printf("Foo!"); } }; template<class T> class FooMgr { public: void Run() { T().Run(); } }; class Bar : public Foo { public: void Run() {

  • C++でクラステンプレートを使った既定クラスへのメンバアクセス

    pknight
    pknight 2010/03/25
  • オワタ四連刻聴牌 - 名古屋313の日記

    pknight
    pknight 2010/03/24
  • STLプログラミング・メモ

    [ C++で開発 ] STLプログラミング・ノート STLを使いこなすためのノートです。STLは機能豊富で汎用的なライブラリ集ですが、使いこなすには難易度が少々高いので、あらかじめ勉強が欠かせません コンテナの要素にポインタを入れたい ポリモーフィズムを活用するためのコンテナ格納法 オブジェクト指向プログラマーがぶつかるSTLの壁の1つです。 オブジェクト指向プログラミングをする以上、アプリケーションプログラムを書く際にはクラスをいくつも定義します。ポリモーフィズムを活用するため継承を使います。しかし、STLのコンテナにオブジェクトを入れようとして、はたと悩みます。世の中のSTLのサンプルは、コンテナに値をコピーで格納します。コピーだと、ポリモーフィズムが使えません。困った・・・ ポインタをコンテナの要素に そこで、苦肉の策としてコンテナにポインタを格納することにします。 #include

  • ちょっと反則だけど最強に使える荒業タスククラスの実装

    ホーム < ゲームつくろー! < クラス構築編 < ちょっと反則だけど最強に使える荒業タスククラスの実装 ちょっと反則だけど最強に使える荒業タスククラスの実装 「タスク」というのは「小さな仕事」という意味で、ゲーム製作ではしばし使われる技法の一つです。タスクはあるメッセージを受けてゲームのパラメータを変えたりキャラクタを動かしたりと、ゲームに変化を与える仕事をなします。 タスクについて良く知らない方のために、タスクの雰囲気をつかんでもらう実装をまずはご紹介します。その昔C言語の時代には、タスクは関数ポインタの組み換えで行っていました: #define MSG_LEFT 0 #define MSG_RIGHT 1 // 左移動タスク void LeftTask(int* pVal){ (*pVal)-=1; } // 右移動タスク void RightTask(int* pVal){ (*p

    pknight
    pknight 2010/03/15
  • C++/Boost 基礎文法最速マスター - 野良C++erの雑記帳

    参考: http://d.hatena.ne.jp/faith_and_brave/20100201/1264997004 「C++0xになると、C++03 でごちゃごちゃした部分がだいぶすっきり書けるようになる」 らしいですが、C++0xを待たなくてもBoostを使えばだいぶすっきり書けるので、 BoostでのC++入門はこんな感じだよー、という気持ちで以下略。 この記事はC言語をある程度理解していることが前提です。 1. Hello World C++/Boostでの出力はC++標準の IOStream ライブラリと Boost.Format を組み合わせて行います。 例として、C言語のprintfを用いた Hello World を、C++/Boostを使って書き直してみます。 #include <stdio.h> int main() { printf( "%s\n", "Hell

    C++/Boost 基礎文法最速マスター - 野良C++erの雑記帳
  • C++0x基礎文法最速マスター - Faith and Brave - C++で遊ぼう

    C++0xになると、C++03でごちゃごちゃした部分がだいぶ すっきり書けるようになるので、C++0xでの入門はこんな感じになるよー、 という気持ちで書きました。 1. Hello World C++0xでの入出力には、IOStreamというものを使用します。 <<演算子でどんどんつないでいきます。 以下のプログラムの読み方は 「標準出力(cout)に"Hello World"という文字列と、改行(endl)を出力する」 です。 #include <iostream> int main() { std::cout << "Hello World" << std::endl; return 0; } Hello World coutとendlを使用するには、 #include <iostream> のように、という標準ライブラリのファイルを読み込む必要があります。 2. コメント 行コメント

    C++0x基礎文法最速マスター - Faith and Brave - C++で遊ぼう
  • C++でforeachみたいなことができるBoost.Foreach - ぬいぐるみライフ?

    ヘッダー boost/foreach.hpp できること C++で他の言語にあるようなforeachっぽいことができるようになる. 使用例 BOOST_FOREACHを使ってコンテナの各要素にアクセスする場合の例. std::vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); BOOST_FOREACH(int i, v) { std::cout << i << std::endl; } コンテナだけでなく配列にも使える. int a[] = {1, 2, 3}; BOOST_FOREACH(int i, a) { std::cout << i << std::endl; } リファレンスを使って各要素にアクセスすることも可能. int a[] = {1, 2, 3}; BOOST_FOREACH(int& i, a

    C++でforeachみたいなことができるBoost.Foreach - ぬいぐるみライフ?
  • クラスをSTLコンテナにいれると恐ろしい事が起こるぞ! - 神様なんて信じない僕らのために

    C++に慣れている人にとっては考えもつかないことですが、 クラスをコンテナにいれる、ということを試したくなる時期があります。 コンテナにクラスのポインタをいれるとポインタ管理が面倒だし、 クラスの実体をいれておいたら便利じゃない? というのがその発端です。 さて、クラスはコンテナにいれてもいいものなんでしょうか? じゃ、やってみましょう! C++ code - 32 lines - codepad 予想と違う結果がでたぞ!!! と思いませんか? なぜデストラクタが呼ばれる回数が想定より多いのでしょう? そして、コンストラクタの呼び出される回数とデストラクタの呼び出される回数が一致していません。 むむ? 訓練されたC++はここであることに気付きます。 「vectorが拡張されている時に恐ろしいことが起きているのではないか?」 では、やってみましょう。 拡張されないようにreserveです。

    クラスをSTLコンテナにいれると恐ろしい事が起こるぞ! - 神様なんて信じない僕らのために
  • C++: 構造体を格納したSTLコンテナに対してソート・探索・削除などのアルゴリズムを適用する

    C++に慣れている人にとっては当たり前のことかもしれないけど、あまりC++に親しんでいない場合、構造体を格納したSTLコンテナに対してアルゴリズム<algorithm>を有効に活用していないかもしれない。そこで、構造体を格納したvectorなどのSTLコンテナでソートや探索、削除などのアルゴリズムの利用方法を書いておく。 struct A { int n; int* p; }; 上記のような構造体はよく見かける形だと思う。構造体Aに整数型変数のnとポインタ型変数のpがあり、例えばnに配列の要素数、pにその配列を確保したりする。こういった構造体を以下のようにvectorなどのSTLコンテナを使って格納することは多々ある。 vector<A> A_list; これで構造体Aをコンテナに格納できるわけだ。ところで、STLコンテナを使用する一つの理由として便利なアルゴリズムが利用できることが挙げら