constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
C++11 (他) 入門 1. C++11 (他) 入門 ~ Java, C, +αを学んだ貴方へ(というのは真っ赤な嘘) Yuta Hirokawa, @krustf/総長1 2012/2/15 2. 内容, 注意 Effective C++ の重要そうな部分を独断で抜き出し C++11 の規格で直結しそうな機能を幾つか紹介 テンプレートに関するテクニックを少々解説 最新規格 C++11(旧称C++0x) に則る ウェブページや書籍では未だC++0x表記による情報が多い 検索時は気を付けること 2 導入 2012/2/15 3. 注意 C++11 完全対応コンパイラは未だ無い 2012年2月14日現在 当スライドでは以下の環境を使用する 一部以下の環境では使えないコードがある(かも) Compiler gcc 4.5 Build Option -std=gnu++0
ふつーにテンプレート使って型に応じた処理をオブジェクト指向っぽく書くと、静的にポリモーフィズムれるんだけど、そのほかにも掲題の「タグ・ディスパッチ」って手法もあるらしい。 タグ付けして処理をグルーピングさせるために使うイメージ。有名所だとSTLのiterator周り、advance関数の処理切り替えとかだそうだ。 正直、この辺の名前 ダックタイピング(動的言語? or C++のtemplate経由?) 静的ポリモーフィズム コンパイル時多態性 の区別や以下の書き方両方ともタグディスパッチ言うのかかなり怪しい。 クラスの中でタグをtypedefしてそのタグに応じて処理を振り分ける書き方。 #include<iostream> //Tag用の構造体 struct TagA{}; struct TagB{}; //クラスの定義 class Hoge1 { public : typedef Tag
2018年10月16日に渋谷のサイバーエージェントで開催された「プログラマのための圏論研究会」で使用した資料です。数学はどの分野も同じですが、下地をしっかりと固めながら学ぶ必要があります。しかし頂上があまりにも遠いので途中で挫折してしまいがちです。圏論を学ぼうとしている人たちも同じような経験をしたのではないかと思います。 プログラマやエンジニアにとっては、圏論の概念を理解して、それを応用する方が重要です。下からの積み上げではなく、頂上から降りるようにトップダウンで、圏論とはこういうものと考え方を把握することが求められます。今回のプレゼンでは、そのような立場から圏論を説明しました。圏論での重要な概念をおさえて、いきなり、本丸の「随伴」に挑戦することにしました。よろしければご利用ください。
最近のboost C++ライブラリは数値計算や幾何計算のほうも充実してきているようで、先日Boost.Geometryの2Dブーリアンを使ってみたらそのパフォーマンスと頑強性に驚かされた。 さらにこのBoost.Geometryは設計が素晴らしい。そのDesign Ratonaleを読んでみたところとても面白かったので、より多くの人に読んでもらいたいなと思って和訳してみた。 わかりやすい題材を元に、traits, タグディスパッチ、コンセプト、メタ関数などのテンプレート周りの独特の技法が少しずつ登場してくるので、これらの概要を把握するにもとても良い資料だと思う。 原文はココ。 なお、「ジェネリック」、「特殊化」といったジェネリックプログラミング独特の用語が頻出するので、なじみのない方は あらかじめここで概要をつかむといいかもしれない。 設計の理論的基礎(Design Rationale)
……とか言いながら、全然「だけ」に留まらない分量になってるのは仕様(C++の)。 なお本記事は、operator new/deleteの概念はある程度理解し、その気になればメモリリークしない程度のoperator new/deleteを実装できるC++erに向けて書かれたものです。operator new/deleteの中身(new_handlerの呼び出しとか)についての説明は行ないませんので悪しからず。 本記事で「規格書」と言った場合、正式なC++11の規格書ではなくhttp://d.hatena.ne.jp/heisseswasser/20121225/1356462583:N3337を指しています。 また、特に明記のない限り、本記事でoperator new、operator deleteと言った場合、配列版のoperator new[ ]、operator delete[ ]につ
『プログラミング言語C++』 C.13.5 typenameとテンプレート テンプレートを使ったプログラムでは、なぜ型名にtypenameを付ける必要があるのだろうか 以下のコードはどちらもエラーになる template <class Container> struct hoge { typedef Container::iterator iterator; // エラー }; template <class Container> void foo(Container& c) { Container::iterator it; // エラー } テンプレートは使わなければコンパイル(コード生成)されないが構文エラーくらいは検出しなければならない だが、構文チェックの時点でコンパイラはContainer::iteratorが「型」なのか「staticメンバ」なのか判別できない そこで、以下の
日本語ドキュメントshared_ptr、weak_ptr boost勉強会http://www.ustream.tv/recorded/2981654 Smart Pointer Programming Techniques 実装してみた shared_ptrの実装1 - while( c++ ); shared_ptrの実装2 - while( c++ ); shared_ptrの実装3 - while( c++ ); shared_ptrの実装4 - while( c++ ); boost::shared_ptrっぽく。 shared_ptrの実装5 - while( c++ ); shared_ptr< void >を可能にする。 shared_ptrの実装6 - while( c++ ); 適当なクラス図とか。 shared_ptrの実装7 - while( c++ ); dele
先日,ついに C++11 の主要な機能を一通り実装した GCC-4.8.1 がリリースされた. もう一方の主要な C++ コンパイラである Clang++ でも C++11 の機能は既に全て実装されており, 来る 6/05 に最新版の Clang-3.3 がリリースされ, C++11 対応が完了する見通しだ.*1 このような状況においては, C++11 への乗り換えを検討し始めているプロジェクトも多いことだろう. さて, C++11 では, C++98/03 との互換性を保ちつつ,クラス設計に大きな影響を齎す変化が採用された. すなわち, Move Semantics である. この登場により, C++11 で「良い」とされるクラス設計は, C++98/03 時代とは若干 異なったものとなる. そこで,この記事では,筆者が C++11 において「良い」と考えているクラス設計を提案してみたい
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く