あなたは可能性があり、テンプレートの魔法と変換演算子のビットを持ちます。オペレータは、このように行うことができます過負荷を、次に
struct DivideMyClass {
DivideMyClass(const MyClass& lhs_, const MyClass& rhs_) : lhs{lhs_}, rhs_{rhs} {}
template<typename T>
operator T() const {
return static_cast<T>(lhs.value)/static_cast<T>(rhs.value);
}
private:
const MyClass& lhs;
const MyClass& rhs;
};
:あなたは最初にあなたの発現のための単純なラッパーを定義することができ
constexpr DivideMyClass operator/(const my_class& a, const my_class& b)
{
return DivideMyClass{a, b};
}
次に、あなたのコードは次のようになります。
double d = MyClass{21}/MyClass{5}; // will be equal to 4.2
この解決方法が悪い理由
言語は戻り値の型によって過負荷になっていません。コードでは、バグがあると思う他の人を混乱させます。このメソッドを広範囲に使用すると、解読不可能なコードになります。
もう1つのことは、暗黙のうちに変換が行われ、実際に通話サイトのオペレータで変換が行われたかどうかはわかりません。
あなたはAAA idom(ほとんど常にAutoを使用します)を防止します。 auto
があなたのコードを壊すかもしれません。それは悪いことです。
このような手法は、テンプレートの表現やそのようなものに使用する必要があります。単純な分割のためにそれを使用すると、他のものを混乱させます。
何を基準に選択しますか? –
'constexpr T operator /'を 'constexpr int operator /'に変更しますか? –
@appleapple時には 'double'を取得したいときに' int'を取得することがあります。 – vladon