次のコードパターンを達成しようとしています。関数がテンプレートクラスメソッドへのポインタ
struct Worker {
void update(/* function pointer */) {
for(unsigned int i = 0; i < 10; i++) {
/* function execution */
}
}
}
template <typename t_derive>
struct BaseCrtp {
void method1() {
static_cast<t_derive*>(this)->method1();
}
void method2() {
static_cast<t_derive*>(this)->worker.update(/*fptr of Derived1::method2*/);
}
}
struct Derived1 : public BaseCrtp<Derived1> {
Worker worker;
void method1() {
std::cout << "Derived1::method1" << std::endl;
}
void method2() {
std::cout << "Derived1::method2" << std::endl;
}
}
私はDeriver1のmethod2をWorker :: updateのインスタンスで呼びたいと思います。更新関数に注入できる関数ポインタを定義するにはどうすればよいですか?
'update'はメンバへのポインタではなくプレーンな関数ポインタを必要としているようです。代わりに 'std :: function'を使うことを考えてください。 – molbdnilo
'method2'は静的メンバー関数ではないので、それを呼び出すために' Derived1'型のオブジェクトを持っている場合にのみ呼び出すことができます。 「労働者」にはそのような議論はない。 molbdniloと言う:あなたはstd :: functionが必要です。 –