1つの親から継承する2つ以上のクラスがあります。それらはすべてhandle
メソッドをオーバーロードしましたが、各クラスにはハンドルメソッドのパラメータが異なります。クラスのセットを指定すると、一致するメソッドのパラメータを持つものを呼び出します。
class CommandHandler {};
class FooCommandHandler : public CommandHandler
{
public:
string handle(const FooCommand& c) { return c.getStringSomehow(); }
};
class BarCommandHandler : public CommandHandler
{
public:
string handle(const BarCommand& c) { return c.getStringSomeOtherWay(); }
string handle(const OtherBarCommand& c) { return c.youGetThePicture(); }
};
FooCommandHandler fooHandler;
BarCommandHandler barHandler;
どのクラスに正しい署名があるかを評価して呼び出す関数が必要です。これは可能ですか?
これはコンパイル時に行われるのが理想的であり、まったく1つの一致があることをstatic_assertします。署名template<typename C> string sendCommand(C c)
考える
:
sendCommand<BarCommand>(c)
はfooHandler.handle(c)
C++ 14である必要がありますか? – Rakete1111
@ Rakete1111、それはC++である必要があります。私はそれがC + + 14の機能を使用する場合は気にしない、ちょうど動作する必要があります。 – ddouglascarr