タグ

c++に関するmEGGrimのブックマーク (43)

  • C++11 とオブジェクト指向 - 偏見プログラマの語り!

    これは C++11 Advent Calendar 2011 の 3 日目の記事です。*1 C++03 から C++11 になったことで大小さまざまな言語仕様拡張・変更がありましたが、それらが C++ におけるオブジェクト指向プログラミングをどう変えてゆくのか、現段階で思うところを書こうと思います。 ・プロローグ 「C++11 と魔法少女まどか☆マギカ」 C++11 の 11 は 2011年 のことです。そして魔法少女まどか☆マギカは 2011年 の日を舞台にした大ヒットアニメです。偶然でしょうか?いいえ、これらが無関係なわけがありません。 さて、C++ に追加された機能で最も強力なのが右辺値参照だと思います。これについては gintenlabo(@SubaruG) さんや, alwei(@aizen76) さんが後日のアドベで詳細を書いてくれると思います。しかしそれら機能の多くはライブ

    C++11 とオブジェクト指向 - 偏見プログラマの語り!
    mEGGrim
    mEGGrim 2012/06/09
  • C++03 の仕様から変更のあったライブラリ - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    この記事は C++11 Advent Calendar 13 日目の記事です。 C++03 で用意されていた標準ライブラリは基的にそのまま残っていたり deprecate されていたりとかぐらいしかありませんが、それでも少し仕様が変更されていたりとかしています。 後方互換性を維持するためあまりダイナミックな変更はされていませんが、それでも結構嬉しい変更だったりするので、覚えてる部分だけ紹介しておきます。(誰か一覧とか作ってくれませんかね?) のアルゴリズム関数に渡す関数オブジェクトの制限の緩和 C++03 では、 のアルゴリズム関数(accumulate, inner_product, partial_sum, adjacent_difference)に渡す関数オブジェクトでは、一切の副作用が禁止されていました。そのため、 struct Hoge { int operator()(int

    C++03 の仕様から変更のあったライブラリ - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
    mEGGrim
    mEGGrim 2012/06/09
  • 夏休みなのでbjam始めてみます 1日目 - fjnlの生存記録のような何か

    bjamが欲しいので、まずはboostをダウンロードして展開し、bjamをビルドします。そして、boostを展開したディレクトリをBOOST_ROOT環境変数に定義しておきます。BOOT_ROOTはbjamの動作上も必要です。 $ export BOOST_ROOT=/path/to/boost $ cd $BOOST_ROOT $ ./bootstrap boost 1.47.0からbootstrapで作成されるbjamの実行ファイル名が、"bjam"と"b2"の2つになっています。1.47の段階ではこれらのファイルの内容は同一で単なるコピーのようですが、以降はbjamで統一します。 Mac環境で、Appleによって提供されていないgccを使う場合は、以下の修正を行う必要があります。(例えばMacports) -no-cpp-precompというオプションはAppleのgccにしか存在し

    夏休みなのでbjam始めてみます 1日目 - fjnlの生存記録のような何か
  • C++でテスト駆動開発

    PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜Preferred Networks

    C++でテスト駆動開発
  • コンテナをストリーム出力 - How to disappear completely

    (vectorとかlistとか)コンテナの中身を確認したくてストリームに出力しようと思っても、 コンテナ自体にはoperator<<が定義されていないのでそのままostreamに出力することはできません。 だからといってコンテナの要素をイテレータでたどるために毎回 for(my_container_t::iterator it = vec.begin(); it != vec.end(); ++it) { std::cout << *it; } とか書くのは面倒です。 かといって上のコードをそのまま関数にするのもstd::coutしか使用できないってことで汎用性がないうえ、 せっかくのoperator<<の仕組みを使えないのは残念です。 (他にはstd::ostream_iteratorを使う方法 std::copy(vec.begin(), vec.end(), std::ostream

    コンテナをストリーム出力 - How to disappear completely
    mEGGrim
    mEGGrim 2012/02/09
  • privateメンバに外部から非侵入的にアクセスする - redboltzの日記

    はじめに C++では通常、クラスのprivateメンバに外部からアクセスすることができない。 アクセスするためには、friend関数やfriendクラスを用いる。 しかし、 http://bloglitb.blogspot.com/2010/07/access-to-private-members-thats-easy.html で話題となり、Daveが、 https://gist.github.com/1528856 にエッセンスを抽出したコードを起こしているが、privateメンバに外部から合法的にアクセスする方法がある。 Daveのコードのコメントだけで必要十分かもしれないが、私は理解するのにかなり時間がかかってしまったので、その経緯を忘れないためにもここに書いておきたいと思う。 メンバポインタの復習 まずは、このコードを見て欲しい。 http://ideone.com/dGRqg

  • http://www.cppll.jp/cppreference/cppio_details.html

    mEGGrim
    mEGGrim 2012/01/05
  • exception_ptr in エラーハンドリング勉強会 - イグトランスの頭の中

    エラーハンドリング勉強会(リンク切れ: http://partake.in/events/9874b92a-4cf0-4a20-a3fe-951239da5612)にて、時間が余っているということで飛び入り発表していました。こんなことなら、初めから参加者として名乗りを上げておけば良かったです。 内容としては、C++11のexception_ptrの使い方を簡単に話しました。そのとき画面に映していたのはこれです: exception_ptr in エラーハンドリング勉強会。 exception_ptrは「ライブラリを作るためのライブラリ」だと私は考えています。使わずに済むならそれに越したことはないです。とは言ったものの、ここではじかにexception_ptrを扱っていますけど。 以下は、そのとき発表した内容を基に、新しく書き起こしたものです。そのため、発表内容(「exception_ptr

    exception_ptr in エラーハンドリング勉強会 - イグトランスの頭の中
  • C++0x の不動点コンビネータを std::ref で高速化する - 野良C++erの雑記帳

    元ネタ: iorateの日記「 C++0x で不動点コンビネータ」 http://d.hatena.ne.jp/iorate/20110729/1311949434 上の記事の不動点コンビネータは,再帰の度に毎回 std::function を生成しているため,かなり遅いですが, std::function は, std::reference_wrapper で包まれた関数オブジェクトを渡された場合に 動的メモリ確保を省いて速度を改善することができるので,試しに std::ref で包んで,オリジナルと比較してみました. ソースコード: #include <utility> #include <functional> namespace pezzi { // ref 版 struct fix1_t { template< class F > struct result { typedef

    C++0x の不動点コンビネータを std::ref で高速化する - 野良C++erの雑記帳
  • C++0x 改め C++11 はじめの一歩 - Siv3D

    Article > C++0x 改め C++11 はじめの一歩 2011 / 8/ 14 2011年8月12日、これまで C++0x と呼ばれていた C++ の次期規格が C++11 (正式名称: ISO/IEC 14882:2011) と改まり、国際標準として承認されました。C++11 では 従来の C++ (2003年に策定されたC++03 ) とほぼ 100% の互換性を保ちつつ、多くの新機能や標準ライブラリが追加され、不便だった部分が改善されました。 現在のところ C++11 の新機能を「すべて」使える処理系は存在しませんが、今回の規格承認を受け対応がますます加速することは間違いありません。Visual C++ 2010 は、すでに C++11 の主要機能のうち「ラムダ式」「auto」「rvalue references」「static_assert」「nullptr」「declt

    mEGGrim
    mEGGrim 2011/08/15
  • C++とのつきあい方(15)

    続・実行時のクラス判定 以前、実行時のクラス判定として、 MFCの場合に使える方法を紹介しました。 今回は、もっと汎用的な、typeidや dynamic_castを使う方法を紹介します。 ここでは概要しか紹介しませんので、実際に使ってみる場合にはコンパイラーの 付属文書等もご覧ください。 型名を調べる まずは、型を文字列として取得する方法。変数varがあったとすると、 const char * ty = typeid(var).name(); という具合に書くことができます。tyには、 "class CHoge *"などといった具合に 型名(ここではクラス名)が入ります。 もっとも、型が想定通りであるか確認するのに assert(strcmp(ty, "class CHoge *") == 0); と書くのはいかがでしょうか。もっとこみいった型で、文字列での書き表し方が 幾通りもあるよう

    mEGGrim
    mEGGrim 2011/08/05
    typeid 型名
  • CUDA用メモリクラス(素体): 晶紀の館 第2別館

    CUDAのプログラムは、思い切りシンプルにすると、こんな感じになります。 const int N = 256; float* h_A = (float*)malloc(sizeof(float)*N); float* d_A; cudaMalloc((void**)&d_A, sizeof(float)*N); for (int i = 0; i < N; i++) h_A[i] = i; cudaMemcpy(d_A, h_A, sizeof(float)*N, cudaMemcpyHostToDevice); func<<<1, N>>>(d_A); cudaMemcpy(h_A, d_A, sizeof(float)*N, cudaMemcpyDeviceToHost); free(h_A); cudaFree(d_A); メモリを確保する GPUにデータを送る 計算する GPUから

    CUDA用メモリクラス(素体): 晶紀の館 第2別館
  • const [C++ Reference]

    このページの最終更新日時は 2020年5月9日 (土) 19:15 です。 このページは 3,487 回アクセスされました。 プライバシー・ポリシー cppreference.comについて 免責事項

  • More C++ Idioms/Copy-on-write - Wikibooks, open books for an open world

    mEGGrim
    mEGGrim 2011/08/02
  • std::forward は Perfect Forward にのみ使われるとは限らない - 野良C++erの雑記帳

    http://d.hatena.ne.jp/gintenlabo/20110108/1294485577#c で、 #include <utility> template<class F, F f> class il_ptr_fun; template<class R, class... Args, R (*pf)(Args...)> struct il_ptr_fun<R (*)(Args...), pf> { typedef R result_type; R operator()( Args... args ) const { return (*pf)( std::forward<Args>(args)... ); } }; この operator() で使われている std::forward の意味が分からない、という指摘が有ったので、 コメントでも書きましたが、改めて解説します。

    std::forward は Perfect Forward にのみ使われるとは限らない - 野良C++erの雑記帳
  • 参照を保持するコンテナ - Faith and Brave - C++で遊ぼう

    同じ基クラスを継承したクラスのオブジェクトがいくつかあり、それらをまとめて扱いたい場合と、専門特化して扱いたい場合、両方が同時に必要なことがたまにあります。 そんなときに、オブジェクトの参照を保持するコンテナが必要になるのですが、どうやらboost::reference_wrapperのコンテナを使用すればいいようです。 こんな感じになりました。 #include <iostream> #include <string> #include <vector> #include <boost/ref.hpp> #include <boost/assign/list_of.hpp> #include <boost/foreach.hpp> struct Base { // 共通で使用する関数 void print() const { std::cout << "print" << std::e

    参照を保持するコンテナ - Faith and Brave - C++で遊ぼう
  • auto指定子の型の推定方法

    autoな変数の型は、代入の式になる。そう言ってしまうのは、単なる一ユーザーである。いやしくもプログラミング言語学者(language lawyer)を自負している以上、auto指定子が、どうやって初期化子の式から、変数の型を推定するのかということを、厳密に知らなければならない。 実際、以下のコードをみれば、「変数の型は初期化の式になる」というのが、不完全な説明であるのは理解できるだろう。 int const a = 0 ; // aの型はint const auto b = a ; // bの型はint auto const c = a ; // cの型はint const auto const & d = a ; // dの型はint const & しかし、この型の推定方法は、何かに似ている。そう、まるでテンプレートの実引数の型を推定しているようだ。まさにその通りである。auto指定

  • C++0x typeof - Faith and Brave - C++で遊ぼう

    decltypeでこれできるかな decltypeでmapのvalue_typeを取得する方法 インスタンスからメンバの型を取得する いろいろ試した結果、これはわりと必須かもしれない typeof.hpp #ifndef TYPEOF_INCLUDE #define TYPEOF_INCLUDE #include <utility> #define typeof(X) std::identity<decltype(X)>::type #endif // TYPEOF_INCLUDE #include <iostream> #include <string> #include <map> #include "typeof.hpp" using namespace std; int main() { map<string, int> dict; dict["Akira"] = 23; dict

    C++0x typeof - Faith and Brave - C++で遊ぼう
    mEGGrim
    mEGGrim 2011/07/29
    decltype(v)::iteratorが駄目な理由
  • double でテンプレートメタプログラミング - iorate's blog

    double は非型テンプレートパラメータに使えないので,そのコンパイル時計算は constexpr 関数に頼るのが一般的だと思いますが,テンプレートでもやってやれないことはありません. // 有名な階乗の計算を double で行います // Gamma function ではありません template <double const &d, bool Continue = (d > 0.9)> struct fact { static constexpr double prior = d - 1.0; // ローカル変数 static constexpr double value = d * fact<prior>::value; }; template <double const &d> struct fact<d, false> { static constexpr double v

    double でテンプレートメタプログラミング - iorate's blog
  • STL風に使えるマップ型コンテナの紹介と性能比較 - Preferred Networks Research & Development

    最近スマートフォンに乗り換えました。徳永です。 C++は世に数あるプログラミング言語の中では比較的メモリをわない方ですが、それでもメモリ使用量が問題となる場合はあります。そのような場合の対処方法はいくつか有りますが、手軽に選択できる方法として、今日はSTLのmapやunordered_mapと同じ感じで使えるデータ構造をいくつか紹介したい思います。 以下、計算量の表記をする際には、要素数をnとします。 Loki::AssocVector LokiはModern C++ Designというの作者であるAndrei Alexandrescuが開発したライブラリです。AssocVectorはその中の一つとして提供されているクラスで、vector<pair<key, value> >という型のベクターをkeyでソートした状態で持つ事により、二分探索による要素の探索を可能にしたデータ構造です。こ

    mEGGrim
    mEGGrim 2011/07/20