タグ

c++とlambdaに関するlizyのブックマーク (7)

  • C++11lambdaを使おう: Gentlesoft Developer's Blog

    Xcodeを4.4.1にバージョンアップする際何気なくリリースノートを眺めていたら、Apple LLVM complier 4.0でlambdaを含むC++11に準拠とある事を発見したので、早速C++11lambdaを実験してみる事にしました。 lambdaについて λ関数とは何かという事から解説すると稿の目的から外れるのでそれはWikipediaにでも任せて、一般的にプログラミング言語で使われるlambda関数について解説します。一般に関数の機能を持つ言語では、事前に別の場所で定義された関数を別の場所から呼び出して使用します。lambda関数は事前に定義を行わず、関数が実行される文中に直接記述する名前のない関数の事です。文中で定義されたlambdaは変数に格納して別の場所で使用したり、他の関数にパラメータとして渡したりできます。 Objective-CではBlocksとしてこの機能が提

  • Objective-C++でBlocksの代わりにC++11のlambdaを利用する

    プログラミング (iOS, JavaScript, Jenkins, Sikuli) とMaciPhoneなどの話題が中心のブログ Clang Language Extensionsによると、C++11のlambda式からBlocksポインタへの変換が自動で行われるみたいなので試してみました。 なお、確認にあたって利用したXcodeのバージョンは5.0 (5A1412)です。 簡単な例 拡張子を.mmにしておけば、lambdaで次のように書くことができます。 auto cmptr = [](id x, id y) -> NSComparisonResult { return [x compare:y]; }; auto array = @[ @"spam", @"foo", @"bar", @"bazz" ]; auto sorted = [array sortedArrayUsingC

    Objective-C++でBlocksの代わりにC++11のlambdaを利用する
  • C++ - C++ における関数スタイルのプログラミング

    図 6 を見ると、ラムダ式で変数と値を取得する方法を、プログラマが完全に制御できることがわかります。しかし、これによって値を使用するという考え方は保持できますが、複雑なデータ構造を値として効率よく操作することには役に立ちません。 不変データ型 不足しているのは、一部の関数型プログラミング言語にあるような効率的な不変データ構造です。このような言語では、不変データ構造は共通データを共有するため、非常に大きくなった場合でも、効率性を高めることができます。データを共有するデータ構造を C++ で作成するのは簡単です。データを動的に割り当てるだけで、各データ構造がそのデータへのポインターを保持します。残念ながら、共有変数の有効期間を管理するのが難しくなります (ガベージ コレクターが普及したのはこのためです)。さいわい、C++ 11 には、std::shared_ptr テンプレート クラスで共有変

    C++ - C++ における関数スタイルのプログラミング
  • C++11 - Lambda Closures, the Definitive Guide - Cprogramming.com

    One of the most exciting features of C++11 is ability to create lambda functions (sometimes referred to as closures). What does this mean? A lambda function is a function that you can write inline in your source code (usually to pass in to another function, similar to the idea of a functor or function pointer). With lambda, creating quick functions has become much easier, and this means that not o

    lizy
    lizy 2011/09/09
    「 if you return a lamba function from a function, you shouldn't use capture-by-reference」 ああ、やっぱり環境を持ち運ぶ事は出来ないのね。ローカル変数の参照を返却したのと同じような問題がある、と
  • clamp : C++ lambda preprocessor - Faith and Brave - C++で遊ぼう

    今さらながら、clampで遊んでみました ・clampとは? C++でラムダ式を使えるようにするプリプロセッサ(そのままですね) ・特徴 boost::lambdaよりも可読性が高く、高性能 C#の匿名delegateによく似ている(そのまま?) ・ダウンロード先 http://assorted.sourceforge.net/clamp/ ・ラムダ式を使わない場合 #include <iostream> #include <vector> #include <algorithm> using namespace std; void disp(int value) { cout << value << endl; } int main() { vector<int> v; v.push_back(3); v.push_back(1); v.push_back(4); for_each(v.

    clamp : C++ lambda preprocessor - Faith and Brave - C++で遊ぼう
  • C++0x ラムダ式 - Faith and Brave - C++で遊ぼう

    【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 ラムダ式 - Faith and Brave - C++で遊ぼう
  • Project page for clamp - the C++ lambda preprocessor

    Project page for clamp - the C++ lambda preprocessor The C++ lambda preprocessor (clamp) converts C++ code containing lambda expressions into ordinary C++ code. Here's a simple example: vector<int> v; // ... std::for_each (v.begin(), v.end() , lambda (int &p) { if (p == 5) p = 0; } ); This example uses the standard algorithm for_each to apply an anonymous function to each element of a vector.

  • 1