タイトルをより適切に言い換える方法がわかりません。
低レベルのコードを単純な関数の外に移動し、コードをクラス内に移動して、クラスがより複雑なものを処理できるようにしたいと考えています。
私はこれから行きたい:
void a(void) {
[low level operation];
//User typed simple operations
[low level operation];
}
static void AClass::b() {
register(a); //register(void (__cdecl *func)())
}
int main(void) {
AClass::b();
return 0;
}
に:
void a(void) {
//[no low level operation]
//User typed simple operations
//[no low level operation]
}
static void AClass::b(void (*func)()) {
auto funcA = [] (void (*func)()) -> void (*)() {
[that first low level operation];
func(); //Which is: void a(void);
[the second low level operation];
};
register(funcA(func));
}
int main(void) {
AClass::b(&a);
return 0;
}
現時点では、「< lambda >::operator ()' : function must return value」というエラーが表示されます-ポインターが原因です。どうすればこの問題を解決できますか? void を返すだけでは機能しません。ラムダへの参照によって引数(関数「func」)を渡すことも機能しません(この場合、ラムダはもはや単なる関数ではなくクラスです)-レジスタ(void(__cdecl *func)() )関数ラムダではない関数を変換できません。
私の問題を解決する方法はありますか?