私は関数ポインタのリストを持つクラスを持っています。 これらの関数ポインタは次のようにバインドされたサブクラスのメンバ関数を指す:でfunctionlistを持つクラスをコピーするときにコピーコンストラクタでの関数ポインタのリバック
functionList.push_back(std::bind(&SubClass::function, this, std::placeholders::_1, std::placeholders::_2));
は今、関数ポインタはまだ古いクラスを指します。 関数ポインタを新しいクラスに再バインドするにはどうすればよいですか?
ここではサンプルコード:
#include <vector>
#include <functional>
class SomeClass
{
};
class testClass
{
public:
typedef std::function<void(const SomeClass& var1, const SomeClass& var2)> transitionFunction;
testClass(){}
testClass(const testClass&s)
{
for(transitionFunction func : s.functionList)
{
// how to rebind the function pointer to the new this?
functionList.push_back("???");
}
}
std::vector<transitionFunction> functionList;
};
class SubClass : public testClass
{
SubClass()
{
functionList.push_back(std::bind(&SubClass::function, this, std::placeholders::_1, std::placeholders::_2));
}
void function(const SomeClass& var1, const SomeClass& var2)
{
}
};
ありがとう!
関数が 'testClass'で宣言されているかのように' testClass'型のオブジェクトに対して 'SubClass :: function(const SomeClass&、const SomeClass&)'を呼び出すとしますか?それはうまくいきません... あなたはより詳細な方法で達成しようとしていることを記述することができますので、適切な解決策を見つけることができます! –
そのような関数を「再バインド」することはできません。他の方法で目標を達成するためには、クラスを再設計する必要があります。 –
"functionListで**クラス**をコピーすると、関数ポインタは古い**クラス**を指していますが、新しい**クラス**への関数ポインタをどのように再バインドできますか?おそらく* object *を意味するでしょう。 – user2079303