このトピックは何度も取り上げられているとあなたが言うのではないかと心配していますが、私は解決策を生み出すことができなかったので、あえて質問します. 探し方が悪かっただけなのかな…
外部関数から「モード」を受け取る関数があるとします。モードに応じて、関数は同じオブジェクトの異なるメンバー関数を呼び出します。これは、引数のないメンバー関数でうまく機能しますが、引数を持つメンバーに拡張する方法がわかりませんでした。実際のアプリケーションでは、引数は int/float ではなく、より複雑なクラスであり、呼び出しはさまざまなループ内にネストされているため、switch ステートメントを何度か配置する必要がありますが、これは見苦しいと思います。
質問 A: 既存の設計に基づいて、引数を持つメンバー関数のサポートを簡単に追加できますか? はいの場合、どのようにそれを行うのですか? 可能であれば、外部ライブラリなしで...
質問 B: これは完全に間違った/悪いアプローチですか? どうすればもっとうまくできますか?
あなたの助けと説明に感謝します。
クリス
ヘッダーの抜粋:
typedef void (Object::*memberFunction)();
class Object
{
void memberFnNoArg();
void memberFnWithIntArg(int arg);
void memberFnWithFloatArg(float arg);
}
cpp の抜粋:
void function()
{
int mode = getModeFromSomewhere();
int intArg = 33;
float floatArg = 66.6;
switch(mode)
{
case 1:
process(&Object::memberFnNoArg);
break;
case 2:
process(&Object::memberFnWithIntArg, ???); // how can I pass arg?
break;
case 3:
process(&Object::memberFnWithFlaotArg, ???); // how can I pass arg?
break;
default:
// do nothing;
}
}
void process(Object::memberFunction func)
{
Object object;
// loops, called several times, ...
(object.*func)(); // how do I handle different arguments?
}