この擬似コードのようなことをする方法はありますか(ところで、私はこれを行うためにテンプレートを使用できないことを知っています、それは単なる説明のためです):
template<operator Op>
int operator Op (int a, number b) {
return (a Op to_int(b));
}
あなたは要点を正しく理解します。現在、これを行うために多くのオーバーロードを使用していますが、繰り返しが多すぎます。void *ポインター(関数args用)を使用して何かを実行し、最終的にruntime-typeid情報を渡そうとしましたが、コードが複雑すぎるように見えました。その他の解決策...
あなたのアイデアに感謝します
オーバーライドされないメソッドを書き込もうとしています...オーバーライドしたい残りのopは言うまでもなく、+、-、/、*のためだけに12を記述しなければなりません。
繰り返したくない具体的な例を挙げましょう。
scalar operator Op (scalar a, string b) {..Op..}
scalar operator Op (scalar a, number b) {..Op..}
scalar operator Op (scalar a, scalar b) {..Op..}
処理は異なりますが、内部で計算を行う必要がある場合は、演算子が異なることを除いて同じです。したがって、12個のオーバーロードされたメソッドを実行する代わりに、3個を実行します。内部のコードは、最初の図よりも少し長くなる可能性があります。申し訳ありません。
私は解決策を見つけたと思います:http: //en.wikipedia.org/wiki/Barton-Nackman_trick またはブーストライブラリnevsanが指摘しました。