読者です 読者をやめる 読者になる 読者になる

ラムダ式でいらないパラメータを無視する

C++

元々boost::bindなどを使って必要なパラメータだけ受け取るようにしていた関数をラムダ式に置き換える場合、いらないパラメータを無視するにはどうすればいいでしょう。と考えて、テンプレートなコンストラクタだけを持つクラスを用意すればよさそうだったのでやってみました。

#include <iostream>
#include <string>

struct ignore_param {
    template <class... Args>
    ignore_param(Args&&...) {}
};

template <class F>
void foo(F&& f)
{
    std::string name = "Akira";
    int age = 27;
    std::string lang = "C++";
    f(name, age, lang);
}

int main()
{
    foo([](const std::string& name, int age, ignore_param) {
        std::cout << name << ", " << age << std::endl;
    });
}
Akira, 27

Boost.Asioとかで使えそうです。