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

可変引数はラムダ式でコピーキャプチャできない

C++

可変個メンバ変数が持てないということは

template <class... Args>
class functor {
    Args... args_; // エラー!
public:
    functor(const Args&... args)
        : args_(args...) {}
};

これできないですね。

template <class... Args>
void foo(Args... args)
{
    [args...](){}; // エラー!
}

ラムダ式によって生成されるクラスはキャプチャした変数をメンバに持つので。


同じようなことをやりたい場合には、tuple作って渡すしかないです。

template <class... Args>
void foo(Args... args)
{
    std::tuple<Args...> t(args...);
    [t](){}; // OK
}

参照ラムダなら可変引数そのまま渡せるかな?