編集:まあ、他の人の提案で、私は最小限の例を作成しました...そしてそれはうまくいったので、将来誰のためにもここで共有します. 作業コードは次のとおりです。
#include <iostream>
#include <functional>
using namespace std;
class myClass
{
char* str;
public:
myClass()
{
str = "";
}
void funcA()
{
funcB([](myClass* mc)
{
mc->str = "HelloWorld";
}
);
}
void funcB(std::function<void (myClass*)> otherFunc)
{
otherFunc(this);
}
void printStr()
{
cout << str;
}
};
int main()
{
myClass mc;
mc.funcA();
mc.printStr();
int done;
cin >> done;
}
元のコードが機能しなかった理由は、funcB の宣言と実装を 2 つの部分 (.h と .cpp) に分割し、.h でこれを行ったためです。
void funcB(std::function<void (myClass*)> otherFunc = NULL)
私が知る限り、ここで NULL を渡すことは絶対にできません。これは私にとって厄介なことであり、うまくいけばバグです。しかし、それ以外は機能します。