このようなクラスの構造があるとしましょう: 、、、およびクラスObjectの親クラスであるbase class 。、 などの関数をクラス内およびすべての子クラス内の仮想関数として使用する前に、これらの関数を個別に実装しました。BoolIntFloatBytesUnicodeBool cast_bool() constInt cast_int() constObject
より良い解決策は、template <typename TYPE> TYPE cast() const代わりに関数を実装することです。ただし、C++ では仮想テンプレート関数が禁止されているため、このタスクを完了する方法がわかりません。私が必要としているのは、 とその子を提供することtemplate <typename TYPE> TYPE cast() constですObject。ジェネリックObject::cast<TYPE>() constは単にスローしCastErrorます; Bool次に、 、 などのすべての型に対して。 、 などのInt関数を実装します。組み込みオブジェクトにキャストを追加することも計画していますが、今は 、 などをオーバーロードするだけです。実装がない場合、テンプレートはに切り替える必要があります。クラスからの一般的な形式で、エラーをスローするだけです。それを行う方法はありますか (おそらく、いくつかのパターンを使用する必要があります)? または、次のような関数を残す方が簡単ですか? 前もって感謝します!Bool::cast<Bool>() constInt::cast<Bool>() constoperator bool() constoperator signed short() constObjectInt cast_int() const