タグ

ブックマーク / yohhoy.hatenadiary.jp (7)

  • 汎用ラムダキャプチャとunique_ptr型とmove関数の小さな罠 - yohhoyの日記

    C++14で導入された汎用ラムダキャプチャ(generalized lambda capture)と、コピー不可かつムーブ可能オブジェクトの扱いについてメモ。 汎用ラムダキャプチャ構文でムーブキャプチャしたstd::unique_ptr型の変数up1を、そのラムダ式中でさらに変数up2へムーブしようとするとコンパイルエラーを引き起こす。 // C++14以降 #include <memory> auto up0 = std::make_unique<int>(42); auto lm = [up1 = std::move(up0)] { auto up2 = std::move(up1); // NG: ill-formed }; ラムダ体は暗黙にクロージャ型(closure type)の const メンバ関数、つまり前掲例ではvoid ClosureType::operator()(

    汎用ラムダキャプチャとunique_ptr型とmove関数の小さな罠 - yohhoyの日記
    kasumani
    kasumani 2015/01/07
    汎用ラムダキャプチャとunique_ptr型とmove関数の小さな罠 C++14で導入された汎用ラムダキャプチャ(generalized lambda capture)と、コピー不可かつムーブ可能オブジェクトの扱いについてメモ。 Tags: feedly, ifttt, recently read, saved for later f
  • 文字列フォーマット中の変数展開 - yohhoyの日記

    プログラミング言語Pythonにおいて、Perl, PHPの変数展開や、Rubyの式展開(の変数名のみ)をエミュレーション。引数なしvars関数の代わりにlocals関数でもOK。 a = 42 b = "abc" print("a={a}, b={b}".format(**vars())) # 出力: a=42, b=abc 関連URL string - Python: is using "..%(var)s.." % locals() a good practice? - Stack Overflow Python 3.4 組み込み関数

    文字列フォーマット中の変数展開 - yohhoyの日記
    kasumani
    kasumani 2015/01/05
    文字列フォーマット中の変数展開 PythonでPerl, PHPの変数展開、Rubyの式展開(の変数名のみ)をエミュレーション。引数なしvars関数の代わりにlocals関数でもOK。 string - Python: is using &quot;..%(var)s.. Tags: feedly, ifttt, recently read, saved f
  • 空のweak_ptrと期限切れを判別 - yohhoyの日記

    C++11標準ライブラリまたはBoost.Smart_Pointersライブラリが提供するスマートポインタweak_ptrにて、空(empty)状態と参照先の期限切れを区別する方法。記事の内容はStack Overflowで見つけた質問と回答に基づく。 // C++11 #include <memory> using namespace std; // Boost.Smart_Pointers #include <boost/shared_ptr.hpp> #include <boost/weak_ptr.hpp> #include <boost/make_shared.hpp> using namespace boost; template <typename T> bool empty_weak_ptr(const weak_ptr<T>& w) { return !w.owner_

    空のweak_ptrと期限切れを判別 - yohhoyの日記
    kasumani
    kasumani 2014/12/15
    空のweak_ptrと期限切れを判別 C++11標準ライブラリまたはBoost.Smart_Pointersライブラリが提供するスマートポインタ weak_ptr にて、空(empty)状態と参照先の期限切れを区別する方法。本記事の内容はStack Overflowで見つけた質問と回答
  • Generic Lambda×Variadic Template Parameter×Ellipsis - yohhoyの日記

    C++14で導入されるジェネリックラムダ(generic lambda)、可変長引数テンプレート(variadic template parameter)、ellipsis(...)の組み合わせによる文法上の曖昧さについて。gccとClangのバグ。 struct { template<typename...Args> auto operator()(Args&&...) const { } } f1; auto f2 = [](auto&&...) { }; int main() { f1(); f2(); // ??? } gcc 4.9.1(-std=c++1y), Clang 3.5.0(-std=c++14)では、ジェネリックラムダ式の(auto&&...)を(auto&&, ...)と誤って解釈し(→id:yohhoy:20130407)、それぞれ下記の通りコンパイルエラーとな

    Generic Lambda×Variadic Template Parameter×Ellipsis - yohhoyの日記
    kasumani
    kasumani 2014/12/01
    Generic Lambda×Variadic Template Parameter×Ellipsis C++14で導入されるジェネリックラムダ(generic lambda)、可変長引数テンプレート(variadic template parameter)、ellipsis(...)の組み合わせによる文法上の曖昧さについて。gccとClangのバグ。 gcc 4.9.1(-s
  • Stream API並列実行スレッドプールを明示指定 - yohhoyの日記

    Java 8で導入されたStream APIの並列ストリーム処理において、実行するスレッドプールを明示指定する方法。Stream APIの既定動作では ForkJoinPoolの共通スレッドプール を利用する。*1 import static java.util.stream.IntStream.range; // 一般に論理プロセッサ数の並列度で実行 range(1, 1000000).parallel().filter(...).collect(...); // 2並列ForkJoinPool上で並列実行 ForkJoinPool forkJoinPool = new ForkJoinPool(2); forkJoinPool.submit(() -> range(1, 1000000).parallel().filter(...).collect(...) ).get(); 関連UR

    Stream API並列実行スレッドプールを明示指定 - yohhoyの日記
    kasumani
    kasumani 2014/06/16
    Stream API並列実行スレッドプールを明示指定 Java 8で導入されたStream APIの並列ストリーム処理において、実行するスレッドプールを明示指定する方法。Stream APIの既定動作ではForkJoinPoolの共通スレッドプールを利用する。*1 Tags:
  • 汎用スコープガード in Java8 - yohhoyの日記

    Java 8で導入されたラムダ式またはメソッド参照と、Java 7以降のtry-with-resources構文を組合せて、任意のオブジェクトに対するスコープガード処理を記述する方法。 // Java 7以降 class X implements AutoCloseable { // AutoCloseable#closeを実装したクラスが必要 void close() { ... } } try (X obj = new X(...)) { // ... } // 上記スコープを抜けるときにobj.close()が呼ばれる // Java 8以降:メソッド参照版 class X { // メソッドシグニチャが"void メソッド名()"であればOK void dispose() { ... } } X obj = new X(...); try (AutoCloseable ac = o

    汎用スコープガード in Java8 - yohhoyの日記
    kasumani
    kasumani 2014/04/09
    スコープガード in Java8 Java 8で導入されたラムダ式またはメソッド参照と、Java 7以降のtry-with-resources構文を組合せて、任意のオブジェクトに対するスコープガード処理を記述する方法。 Tags: feedly, ifttt, recently read, saved for later
  • メソッド参照と等価なラムダ式 - yohhoyの日記

    Java 8で新たに導入されたメソッド参照(method reference)についてメモ。 メソッド参照は下記の4種類に分類される。 [a] staticメソッドへの参照 [b] 特定オブジェクトのインスタンスメソッドへの参照 [c] 同一クラス任意オブジェクトのインスタンスメソッドへの参照 [d] コンストラクタへの参照 下表はメソッド参照の記法(Class=クラス名, object=変数名、staticMethod/method=メソッド名)と、それぞれ等価なラムダ式を表す。メソッドおよびコンストラクタは引数無しと仮定している。 メソッド参照 等価なラムダ式 [a] Class::staticMethod () -> Class.staticMethod() [b] object::method () -> object.method() [c] Class::method t ->

    メソッド参照と等価なラムダ式 - yohhoyの日記
    kasumani
    kasumani 2014/03/29
    メソッド参照と等価なラムダ式 メソッド参照は下記の4種類に分類される。 Tags: feedly, ifttt, recently read, saved for later from Pocket March 29, 2014 at 03:13PM via IFTTT
  • 1