私は彼に次のインターフェースを持っています:
template <class T>
class AbstractTask {
public:
virtual void BindTaskCompleted(AbstractTask<T> &bindedTask)=0;
virtual void Join(TaskResult<T>)=0;
};
そして、次の含意:
template <class T>
class SlaveTask: public AbstractTask<T> {
public:
typedef boost::function<void(TaskResult<T>)> joinFunction;
void BindTaskCompleted(AbstractTask<T> &bindedTask)
{
/////////////WORK OK//////////////////////////////
//bindedTask.Join(result);
/////////////COMPILATION ERROR/////////////////////
slaveTaskCompletionFunction=boost::bind(&AbstractTask<T>::Join,bindedTask,result);
}
void Join(TaskResult<T> r)
{
slaveTaskCompletionFunction(r);
}
private:
joinFunction slaveTaskCompletionFunction;
TaskResult<T> result;
};
AbstractTask実装の仮想Joinメソッドを同じシグネチャを持つboost::functionにバインドしようとしています。boost :: bindは77のコンパイルエラーをスローし、その理由がわかりません。
私は最初、boost :: bindは仮想メソッドでは使用できないと思っていましたが、そうではないようです: 仮想関数とブーストバインドの奇妙な動作
よろしくお願いします!
トーマス