Operator overloading of native types?

Simen Kjaeraas simen.kjaras at gmail.com
Thu Dec 13 16:07:24 PST 2012


On 2012-12-14, 00:19, H. S. Teoh wrote:

> I'd like to overload the '*' operator to work with string arguments. Is
> it possible? I tried the following, but apparently operator overloading
> doesn't work at the package level?
>
> 	string opBinary(string op)(string repeatMe, int thisManyTimes)
> 		if (op=="*")
> 	{
> 		auto app = appender!string();
> 		while (thisManyTimes > 0) {
> 			app.put(repeatMe);
> 			thisManyTimes--;
> 		}
> 		return app.data;
> 	}
>
> 	void main() {
> 		writeln("spam" * 3);	// compile error
> 	}
>
> Or is this just a very bad idea? ;-)

Like bearophile said, overloaded operators need to be defined inside
one of the types on which they should operate. Since built-in types
cannot be modified, one cannot overload operators on them.

-- 
Simen


More information about the Digitalmars-d-learn mailing list