タグ

関連タグで絞り込む (156)

タグの絞り込みを解除

c++とcに関するtyruのブックマーク (300)

  • ソースブラウザとしてのDoxygen(どきしじぇん) - RC3の日記

    裏タグ[組込み][マイコン][V850] はじめに 前々からの懸案となっていたMicrOS(OSの癖に5000行とコンパクト)のソースコードリーディング。なんとなくやる気がおきない。それはなぜか?自己分析した結果、手持ちのエディタが秀丸だからという結論が出た。その詳細は省略して、"ソースコード 解析"とかで検索する。検索中に、ふと、リーマン時代に使ってたDoxygenを思い出す。Doxygenは、ソースコードに特殊コメントを埋め込んで、Doxygenをかまして、ドキュメントを生成するツール。そういえば、Doxygenはドキュメントだけでなく、ソースブラウザとして使えるじゃんと思い立つ。 インストール doxygen ダウンロード&インストール。 doxygen-1.5.5-setup.exe graphviz ダウンロード&インストール。 graphviz-2.16.1.exe Doxyg

    ソースブラウザとしてのDoxygen(どきしじぇん) - RC3の日記
  • メンバ変数の宣言順とコンストラクタ初期化子の順番が違うと怒られる - みねこあ

    仕事中、こんなビルド警告に遭遇しました。 class Foo { double d; int i; public: Foo( int i, double d ) :i(i), d(d){} }; int main( void ) { Foo foo( 1, 3.14 ); return 0; } このコード (test.cpp) を -Wall オプション付きでビルドするとこんな感じで怒られます。 C:\tmp\cpp>g++ test.cpp -Wall test.cpp: In constructor `Foo::Foo(int, double)': test.cpp:4: warning: `Foo::i' will be initialized after test.cpp:3: warning: `double Foo::d' test.cpp:7: warning: when

    メンバ変数の宣言順とコンストラクタ初期化子の順番が違うと怒られる - みねこあ
    tyru
    tyru 2009/06/03
    なるほど
  • 2004-10-27

    うん.なんていうかね.Boost.Serializationのutf8_codecvt_facet.hppとutf8_codecvt_facet.cppの実装を追ってたのよ.(RC枝から引っ張ってきたやつ)いやcoding変換の実装を追うのは楽しかったですよ?何せ実装が極めて素直だから,うにコード超初心者の自分でも教科書さえ手元にあれば「ああ,これはこれね」って感じだったもん. 問題はそこじゃねぇ. このユーティリティ,std::codecvtなる標準のクラスから派生してる.恐らくこのstd::codecvtはただのインターフェース定義.このstd::codecvtから派生したutf8_codecvt_facet_wchat_tをfacetとして突っ込んだlocaleオブジェクト作って(std::codecvtはlocale::facetから派生してる),それでstreamをimbueすれ

    2004-10-27
    tyru
    tyru 2009/06/03
    boostでも使われているワイド文字とそうでない文字の変換の仕組み
  • std::stringとstd::wstringの相互変換 - kryozahiro’s diary

    ポータブルで簡単な方法を探していたら、 http://ml.tietew.jp/cppll/cppll/article/4783 がよさそうだったけど、バグがあったのでいろいろ修正してみた。 #include <cstdlib> #include <string> //ワイド文字列からマルチバイト文字列 //ロケール依存 void narrow(const std::wstring &src, std::string &dest) { char *mbs = new char[src.length() * MB_CUR_MAX + 1]; wcstombs(mbs, src.c_str(), src.length() * MB_CUR_MAX + 1); dest = mbs; delete [] mbs; } //マルチバイト文字列からワイド文字列 //ロケール依存 void widen

    std::stringとstd::wstringの相互変換 - kryozahiro’s diary
    tyru
    tyru 2009/06/03
    「ロケール使うから環境依存なんだけど、どこでもコンパイルが通って、実用上どこでも使えて、かつ簡単な方
  • Doxygen

    ソースコード・ドキュメンテーション・ツール Doxygen は、C++、C、Java、Objective-C、Python、IDL (Corba、Microsoft 風)、Fortran、VHDL、PHP、C# 向けのドキュメンテーション・システムです。 D にもある程度対応しています。 Doxygen には、次の3つの利点があります。 文書化されたソースファイルのセットから、 オンライン・ドキュメント・ブラウザ (HTML形式) やオフラインのリファレンス・マニュアル (形式) を生成することができます。 RTF (MS-Word)、PostScript、ハイパーリンク PDF、圧縮 HTML、Unix man ページ形式の出力もサポートされています。ドキュメントは、ソースから直接抽出されます。これにより、ドキュメントとソースコードの一貫性を保つことがとても容易になります。 Doxyge

  • C++ way of strtol | Bytes

    tyru
    tyru 2009/06/03
    strtol()のC++風なやり方について。stringstream使うか嫌だったらやっぱstrtol()使えと。
  • http://ja.wikipedia.org/wiki/C%20%200x

  • http://www.cpptalk.net/binaryfunction-operator-vt22669.html

    tyru
    tyru 2009/06/02
    なぜstd::binary_functionにはoperator()がないのか / 質問者とSTLの目的が違うのと、plusなどがアップキャストしても自分のoperator()を呼べã‚
  • C++

    Boost C++ Libraries ...one of the most highly regarded and expertly designed C++ library projects in the world. — Herb Sutter and Andrei Alexandrescu, C++ Coding Standards C++ Organizations C++ Standards Committee Issues lists and papers give insight into current status and future directions. Association of C & C++ Users Over 2400 book reviews, and lots more. Online Publications The C++ Source "Th

    tyru
    tyru 2009/06/02
    C++について
  • template typedefとか型をマクロの引数にする話とか - 梶本裕介の日記

    http://d.hatena.ne.jp/blanketsky/20071027/1193488871確かに現行のC++にはtemplate typedefが無いのですが,metafunctionで代用するのが普通です(C++ユーザの普通って人によってかなり差がある気もしますけど). template class T> struct make_heap { typedef priority_queue, greater > type; }; make_heap::type heap; もちろん今回のようなケースではこちらをお勧めします.次に,マクロの引数としての型の話なのですが, FOO((pairint, int>)) foo; のようにすれば,(pair)を1つの引数と解釈できます.ただ,この場合マクロ側で型の周りに付いたパーレンが邪魔になります.型をパーレンで括って記述できる場所と

    tyru
    tyru 2009/06/02
    テンプレートクラス&typedefを使って型を自動生成
  • Boostの遊び方(ライブラリまとめ)

    私は「Boostを使って」ではなく「Boostを作って」勉強している 仕事ではBoostを使いたくても使えないことが多いだろう (「フリーのライブラリなんて使っちゃダメ」とか言われて) そこで、Boostの必要なもののみを作って使用している 各機能をヘッダーファイル1で提供できるので移植もしやすいだろう このブログで紹介したものを以下にまとめる(※随時更新) 【Boost家】 Boost C++ Libraries Boost C++ Libraries(cppllによる翻訳) 【Boostからの移植】 ・shared_ptr 参照カウント付きスマートポインタ ・shared_array 参照カウント付きスマートポインタの配列版 ・array 固定長配列 ・lexical_cast 数値と文字列の相互変換 ・type_traits 型特性 ・scope_guard ・static_as

    Boostの遊び方(ライブラリまとめ)
    tyru
    tyru 2009/06/02
  • template の適当な説明

    テンプレートの定義と実体化 テンプレートを使ふと、パラメータ化されたクラス・関数を定義することが出来る。 template <typename T> class MyVector { public: ... private: T* data; }; template <typename T> void swap(T& a, T& b) { T tmp = a; a = b; b = tmp; } 定義したテンプレートは、次の様に実体化して使ふ。引数から全てのテンプレート引数が分かる場合は、テンプレート引数を指定しなくても良い。 // この場合、どの型の MyVector かを明示的に指定しなければならない MyVector<int> mv; int x, y; ... // 引数が int なので swap<int> を実体化すべきだと分かる swap(x, y); // 勿論、明示的に実

    tyru
    tyru 2009/06/02
    テンプレート引数には「型」「値」「テンプレート」の三つを取ることができる
  • 配列のシャッフル

    イントロダクション よく、ランダムな数字の並びで、それぞれの数字がちょうど1回ずつしか出てこない、という数列が欲しいことがあります。例えば、カードのシャッフル等がこれにあたります。こういう時は配列に数字を入れ、その配列の要素をシャッフルして目的の数列を得るのが定石です。そのシャッフルをどうやるのがいいのか、というのが今回の話題です。 まず思いついた方法 昔私が最初に考えついたのは、ランダムに2つの要素を選んで swap する、という操作を複数回繰り返すという方法でした。コードっぽく書くと、次のような感じになります。 M = count_of_iteration; N = size_of_array; rand(x) = random_value_less_than_x; for(i = 0; i < M; i++){ a = rand(N); b = rand(N); swap(array

  • テンプレートあれこれ (4) -- typename の役割 - C++ Labyrinth

    テンプレートあれこれ (4) -- typename の役割 typename というキーワードには、2通りの用法がある。 "static" もそうだが、同一のキーワードに複数の意味を持たせるのは、 C++ の悪い癖だな。なんとかしてほしいところ。 で、typename の一つの意味は、テンプレート引数として 「型」を取ることを宣言する場合。 これは、"class" キーワードで置換できる。 たとえば、次の (A) と (B) は同値である。 template<typename T> class Foo; // (A) template<class T> class Foo; // (B) まあ、これは誰でも知っていると思う。 typename には、もう一つ、後続する識別子が 「型名」であることを明示するという重要な働きがある。たとえば、 template<class T> class

    tyru
    tyru 2009/06/02
    typenameには『後続する識別子が型名であることを明示するという重要な働きがある』
  • C++の新しいキャスト

    C++の新しいキャスト 従来のキャストの問題点 異なる型への変換において、C/C++ではキャストが用いられます。 // intからlongへのキャスト int ival; int lval = (long)ival; ご存知のとおり、キャストは非常に危険です。 来ならば型の不一致によるコンパイルエラーをねじ伏せるのですから。 キャストの使われ方(意味)は、大きく3種(型変換/型変更/const外し)に分類されます。 型変換 // int から double へ int ival; double dval = (double)ival; 型変更 // long から int* へ long lval; int* iptr = (int*)lval; const外し // const int* から int* へ const int* ciptr; int* iptr = (int*)cip

    tyru
    tyru 2009/06/01
  • C++の4つのキャストを使いこなす

    イントロダクション C++ には全部で4種類のキャストがあります。これらの使い方をしっかり確認しておこうというのが今回の主旨です。いきなり題に入ってもいいのですが、まずは C 言語のキャストをおさらいしてみましょう。 (type-name) cast-expression C のキャストにはこの1つの形式しかありません。ややこしいですね。1つしかないのに何がややこしいかって?見た目は1つの形式しかないのに実際の動作は何通りもあるのがややこしいんです。ざっと考えただけでも次の3つの使い方が思い浮かびました。 float average(const int* array, int size); int n = (int) average(array, size); void * get_data(int nID); char * p = (char *) get_data(2); int g

    tyru
    tyru 2009/06/01
    ダウンキャストに失敗したらnullが返るのかー
  • はてなブログ | 無料ブログを作成しよう

    トルコ水紀行 -前編 イスタンブール- みなさんこんばんは、地図子です!8月は久しぶりに毎月更新にしようと思います。今までずっと名古屋について書いてきましたが、ワープして・・・ トルコについて書きたいと思います。 2024年6月に念願のトルコに行ってきました。いつからトルコに行きたかったかわから…

    はてなブログ | 無料ブログを作成しよう
  • http://tamachan.club.kyutech.ac.jp/~gridbug/spirit/

  • C++に足りないと思うもの - Faith and Brave - C++で遊ぼう

    思いついたのをざっと列挙。 【タプルリテラル】 Uniform Initialization使えばできるけど、{1, 2}じゃなくて(1, 2)と書きたい 【Boost.uBLAS】 標準で行列クラスとかほしい 【Boost.Fusion】 TupleよりFusionのほうがカッコいい 【多重ディスパッチ】 N2216 - Report on language support for Multi-Methods and Open-Methods for C++ void foo(virtual A&) { } 【パターンマッチング】 特殊化じゃなくて、動的にやりたい int factorial(int n == 0) { return 1; } int factorial(int n) { return n * factorial(n - 1); } 【Range-baseライブラリ】 b

    C++に足りないと思うもの - Faith and Brave - C++で遊ぼう
    tyru
    tyru 2009/05/28
  • BoostのC++0x対応 - Faith and Brave - C++で遊ぼう

    Boostは1.36.0あたりからC++0x対応が始まってて、いくつかのライブラリはすでに右辺値参照に対応しています。 Boost 1.39.0からはC++0xの可変引数テンプレートに対応するらしく、 shared_ptrを生成するmake_sharedヘルパ関数が追加されるようです。 (明日あたりβ版という噂があったりなかったり。) 可変引数テンプレートに対応すれば、bindやfunctionといった多くのライブラリが読みやすくなるので楽しみです。 あと、Boost.Fusion0xというプロジェクトもあるみたいです。 現在の実装を見る限りは今後に期待って感じですね。 (型リストの長さを再帰で計算してたり。) 追記: make_sharedはBoost 1.36.0からあったみたいです。 1.39.0では可変引数テンプレート版が用意されます。

    BoostのC++0x対応 - Faith and Brave - C++で遊ぼう
    tyru
    tyru 2009/05/28