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