特定の関数呼び出しによって作成されたメンバー変数としてラムダがある状況があります。問題は、これを操作の一部としてキャプチャすることです。後で、オブジェクト全体をコピーできるようにしたいと思います...
ただし、コピーの時点では、ラムダがどのように作成されたかはわかりません(異なるコードパスを介していくつかの場所で定義されている可能性があります)。したがって、コピーコンストラクターに何を入れるかについては少し戸惑っています。理想的には、ラムダのキャプチャを、作成された新しい「this」に「再バインド」したいと思います。
これは可能ですか?
サンプルコードは次のとおりです。
#include <iostream>
#include <string>
#include <functional>
class Foo
{
public:
Foo () = default;
~Foo () = default;
void set (const std::string & v)
{
value = v;
}
void set ()
{
lambda = [&]()
{
return this->value;
};
}
std::string get ()
{
return lambda();
}
std::string value;
std::function <std::string (void)> lambda;
};
int main ()
{
Foo foo;
foo.set ();
foo.set ("first");
std::cerr << foo.get () << std::endl; // prints "first"
foo.set ("captures change");
std::cerr << foo.get () << std::endl; // prints "captures change"
Foo foo2 (foo);
foo2.set ("second");
std::cerr << foo.get () << std::endl; // prints "captures change" (as desired)
std::cerr << foo2.get () << std::endl; // prints "captures change" (I would want "second" here)
return 0;
}
前もって感謝します。