Hi,
I recently wanted to overload '*' with one of my class which can accept external multiplication with bigints.
In other words, I wanted to do something like:
my $obj = new My::Custom::Object; use bigint; my $mult = 2**100 * $obj;
I realised that overloading '*' inside My::Custom::Object would not be enough as the class resolution would first process '*' inside Math::BigInt if the number is the first operand.
So I thought I should directly overload '*' inside Math::BigInt. I guess I can do that even if this class is not "mine", right?
package Math::BigInt; use overload '*' => sub { if (ref $_[1] eq 'My::Custom::Object') { $_[1]->MultiplyByInt($_[0]); } else { $_[0]->bmult($_[1]); } }
I'm not sure this is a good solution, though. My concern is about using 'bmult' instead of '*'. I doubt bmult will behave correctly if something else than a BigInt is provided as a second operand.
I thought about creating a child class of Math::BigInt so '*' can fallback to parent '*' when necessary but then I'll have to explicitely bless my integers which would be annoying.
So, how should I do this right?
In reply to Overloading multiplication involving BigInt by grondilu
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |