C++14 の Generic lambda で bind1st 書いてみた

前回試したときは Generic lambda でキャプチャが出来なかったんですが、今回すべてが実装されたようなので再度試してみました。

[ソース]

#include <iostream>

template<typename F, typename T>
auto
bind1st(F func, T t){
    return [=](auto... args){
        return func(t, args...);
    };
}


int
plus(int a, int b){
    return a + b;
}

int
main(){
    auto plus3 = bind1st(&plus, 3);
    std::cout << plus3(5) << std::endl;
    std::cout << plus3(1) << std::endl;
    return 0;
}

[出力]

8
4


雑ですがこんな感じでめちゃくちゃ簡単に書けますね。
あとはラムダ式が constexpr に対応すれば最強なのですが。

[コンパイラ]

  • clang++ (LLVM) 3.4 20131110(trunk)