※「C++(compile time)は純粋関数型言語だよ(by id:DigitalGhost)」というのは全く関係ないです。 C++の人がHaskellを学ぶと、const付けないと気が済まなくなり、 if文よりも条件演算子を多用するようになります。(きっと) Haskellを学ぶ動機としては、モナドとかよりも「副作用(状態の変更)を恐れる」という考えを 身につけることのほうが重要だと思っています。
C++0xの標準ライブラリにはが追加され、その中にis_polymorphicという 型が多態的に振る舞うか(つまり、仮想関数テーブルを持っているか)どうかを 判定するメタ関数があります。 is_polymorphicの実装は、指定された型を継承してみてサイズをチェックする、というものになるはずですが #include <iostream> using namespace std; template <class T> class is_polymorphic { template <class U> struct first : public U {}; template <class U> struct second : public U { virtual void dummy(); virtual ~second(); }; public: static const bool va
LokiはPolicy-based Designのライブラリとして有名ですが、 その設計にはテンプレート・テンプレート・パラメータを多用されています。 C++03の段階では以下のようなテンプレート・テンプレート・パラメータを用意しても template <template <class T> class Container> class X { Container<int> cont_; }; std::vectorを渡すとエラーになってしまい X<std::vector> x; // エラー! std::vectorのテンプレートパラメータとパラメータ数を合わせるために 以下のようにアロケータを受け取るためのパラメータを追加しないといけません。 template <template <class T, class Alloc=std::allocator<T> > class Conta
作ってみました。 最後と最初がつながってなかったり、最後が「ん」の文字列が入力されたらその後の処理はしません。 はこちら #include <iostream> #include <string> #include <locale> #include <shand/maybe.hpp> using namespace std; using namespace shand; inline maybe<wstring>::type last_and_first(const wstring& last) { return monad_return(last); } struct next { wstring first_; public: typedef maybe<wstring>::type result_type; next(const wstring& first) : first_(f
C++にはScope Guardというイディオムがあります。 関数のスコープ抜けたらこの関数実行してね、というものなのですが C++0xにはラムダ式が入るので、それを組み合わせれば関数が抜けたときに実行する処理をその場で書くことができます。 でも、Scope Guardは標準では提供されないので、作ってみました。 shand/scope_guard.hpp #ifndef SHAND_SCOPE_GUARD_INCLUDE #define SHAND_SCOPE_GUARD_INCLUDE namespace shand { namespace detail { class scope_guard_functor_base { bool cancel_; public: scope_guard_functor_base() : cancel_(false) {} virtual ~scop
2008/12/12 米グーグルは12月11日、C++用のテストツール「Google C++ Mocking Framework」(Google Mock)をBSDライセンスの下に、オープンソースとして公開したと発表した。Google MockはLinux、Windows、Mac OS Xで使える。同社はGoogle Mockを100以上の社内プロジェクトで利用しているという。同社は5カ月前にも「Google C++ Testing Framework」(Google Test)をオープンソースで公開しており、両者を併用することでMockオブジェクトを使ったテスト駆動開発が行えるという。将来的にはGoogle MockをGoogle Test以外のテストツールでも使えるようにしていくという。 Mockオブジェクトは、プロトタイプ設計やテスト時に利用するもので、本物のオブジェクトを実装する代
【2015年12月24日記載 : C++11 ラムダ式の正式なまとめは、こちらのページ「C++11 ラムダ式 - cpprefjp C++日本語リファレンス」を参照してください】 今まではラムダ式のリビジョンが上がるたびに差分だけ書いてたので C++0xに採択されたラムダ式の解説をあらためて書きます。 【C++03までの問題点】 C++03では、関数をその場で作成する、ということができなかったため 関数を受け取るSTLアルゴリズムを使用する場合、以下のように、アルゴリズムに渡す用の関数を作成しなければなりませんでした。 struct is_even { typedef bool result_type; bool operator()(int x) const { return x % 2 == 0; } }; vector<int> v; find_if(v.begin(), v.end
C++0xの概要はこちら ・Angle bracket テンプレートの連続した山カッコの問題の解決 ・初期化子リスト ユーザー定義のクラスで配列のような初期化構文を実装可能になる ・Uniform initialization コンストラクタの構文と初期化子リストの構文が一様になる ・デリゲーティング・コンストラクタ コンストラクタから他のコンストラクタを呼び出せる ・auto 型推論 ・記憶クラス指定子としての auto の削除 autoキーワードの意味が変更になるため、下位互換がなくなる ・decltype sizeofの型版 ・Template Aliases テンプレートを使用して型の別名を付けることができる。いわゆるtemplate typedef ・拡張sizeof 構造体/クラスのメンバをインスタンス化せずにsizeofすることが可能になる ・nullptr ヌルポインタを表
話のネタはありながら、気が付けば木曜日となり、どうやら毎週木曜日に書くという習慣が自分の中に根付いたようです。 さて今日はC++の話です。ActiveBasicもバージョン5で色々と変わりそうですが、C++も目下新規格の制定に向けて話が進んでいます。その新規格は現在のところ、C++0xと呼ばれています。勿論200x年中の制定を見込まれているからですが、最近ではC++09という言葉もちらほら見かけ始めている気もします。 なお、そんなC++0xの様子はC++の標準化委員会のページで窺い知ることができます。 http://www.open-std.org/jtc1/sc22/wg21/ JTC1/SC22/WG21 – The C++ Standards Committee その中でも今回紹介したいのはムーブセマンティクス (move semantics)と右辺値参照 (rvalue refer
このページについて C++関係の話に出てくる言葉で、「読んで字の如し」 とはいかない難解語の簡単な解説を並べてみました。Glossaryというより、 むしろ略語辞典になってしまいました。巷で見かけた単語を並べているだけなので、 実際の所ほとんど使われない略語もあったりするかもしれません。 ちゃんとした用語集は Bjarne Stroustrup's C++ Glossary などをご覧になることをオススメします。 用語集 ADL (Argument Dependent name Lookup) 引数に依存した名前の探索。 Argument Based Lookup, Koenig Lookup とも呼ばれる。 #include <iostream> #include <string> ... std::string s; std::cout << s << std::endl; // os
はじめに C++の新しい標準規格である「C++0x」の大きな新機能の1つが、マルチスレッド処理のサポートです。 従来のC++では、マルチスレッド機能は標準規格の拡張としてコンパイラごとに提供されていたため、細かな部分がコンパイラやプラットフォームによって異なっていました。しかしC++0xでは、すべてのコンパイラが同じメモリモデルに準拠し、同一のマルチスレッド機能を利用できることになります(ただし、従来同様の拡張をコンパイラが独自に提供することも可能です)。 開発者の立場からすると、マルチスレッドのコードを別のコンパイラやプラットフォームへ移植するときの手間を大きく省くことができます。複数のプラットフォーム向けの開発を行う場合でも、種々雑多なAPIや構文をいくつも頭に入れておく必要がありません。 新しいスレッドライブラリの中心を担うのは、実行スレッドを制御するstd::threadクラスです
STLのalgorithm,functor 関連をシンプルに整理してみました. 以下,文中の op は関数オブジェクト T, T1,T2 はtypename a, b はT型の定数 x, y はT型の変数 or 定数 Ite,first, last はイテレータ とします. equal_to, not_equal_to, greater, less, greater_equal, less_equal 書式 生成されるコード greater()(x, y) x > y less()(x, y) x < y greater_equal()(x, y) x >= y less_equal()(x, y) x <= y equal_to()(x, y) x == y not_equal_to()(x, y) x != y bind1st, bind2nd 書式 生成されるコード bind1st(
å�‚考: 1. http://www.newty.de/fpt/functor.html -- ã�»ã�¨ã‚“ã�©ã€�ã�“ã�®ã‚³ãƒ¼ãƒ‰ã�«ã‚³ãƒ¡ãƒ³ãƒˆã‚’åŠ ã�ˆã�Ÿã� ã�‘ã�§ã�™w 2. http://d.hatena.ne.jp/nurs/20080125/1201278130 -- 最åˆ�ã�“ã�®ãƒšãƒ¼ã‚¸ã‚’見ã�¤ã�‘ã�Ÿã�®ã�§ã�™ã�Œã€�ã�“ã�®æ–¹æ³•ã� ã�¨å®Ÿè¡Œæ™‚ã�«ãƒ•ã‚¡ãƒ³ã‚¯ã‚¿ï¼ˆé–¢æ•°ã‚ªãƒ–ジェクト)を作ã�£ã�¦ã€�é…�列ã�«å…¥ã‚Œã�¦å‡¦ç�†ã‚’切り替ã�ˆã€�ã�£ã�¦ã�“ã�¨ã�Œå‡ºæ�¥ã�ªã�„ã�¨æ€�ã�£ã�Ÿã
はじめに ソフトウェア業界には現役開発者の立場を保持しながら、ソフトウェアハウスを経営するオーナー社長がいます。彼らは最新の技術動向を観察しながら、組織を引っ張ります。数10年に及ぶ豊富な開発経験と圧倒的な技術力を誇り、組織内ではカリスマ化している人さえいます。開発者と経営者の2足の草鞋を履きこなすのは簡単なことではないでしょう。彼らは相当のプレッシャーを感じながら日々生きているはずです。 本連載で取り上げているBjarne Stroustrup氏は、C++を設計しただけではなく、国際標準化委員会活動の先頭に立っています。同氏もプレッシャーの中で生きている一人のはずです。 今回の質問意図 Stroustrup氏はC++発展の歴史を振り返りながら、“C++の設計作業は所属組織の支援を受けることなく、自分独りで始めたものである”と述懐しています(関連情報:豊田孝の「IT談話館」)。辛い孤独な作
はじめに ソフトウェア業界はいろいろな特徴を持っています。その特徴の1つに、競争の激しさがあります。先日、Google社はChromeというブラウザを発表しました。発表したからには、先行する他のブラウザのシェアを奪い、多くのユーザーを獲得しなければなりません。Chrome開発チームは、ベンチマークテスト結果などを公表しながら、自分たちのブラウザの優秀さを売り込みに出ています。ブラウザ競争は当然激しさを増します。 ところで、既存ブラウザの開発チームは公開されるベンチマークテスト結果などを黙ってみているのでしょうか。その胸の内はどのようなものなのでしょうか。Chrome開発チームが公開するテスト結果は、既存ブラウザの、例えば、処理速度が遅い、などの相対値を示しているはずです。筆者は既存ブラウザ開発者たちの胸の内が大変気になります。心穏やかならず、といったところでしょう。反論もしたいところでしょ
Programming languages --- C++ Languages de programmation --- C++ ISO/IEC JTC 1 Secretariat: ANSI Voting begins on: 1998-04-23 Voting terminates on: 1998-06-23 In accordance with the provisions of Council Resolution 21/1986, this document is circulated in the English language only. PRODUCTION NOTE: The dates in the headers of this FDIS, which currently read "1997", will be changed to "1998" bef
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く