任意のタイプを返すことができ、コマンドを受け取り、FormDataオブジェクトを受け取るディスパッチャーがあります。アイデアは、特定のものを渡すときにFormDataから継承したいということです。
struct FormData {};
struct Form : FormData {};
void login(const Form *f){}
enum Command
{
LOGIN
};
template <typename T>
T dispatch(const Command command, const FormData *f)
{
switch (command)
{
case LOGIN: login(f);
}
return T();
}
int main()
{
Form f;
dispatch<void>(LOGIN, &f);
return 0;
}
FormからFormDataに変換できないというエラーが表示されます。テンプレートを削除します。すべて正常に機能します(ただし、テンプレートが必要です)