logical operands on strings
TheFlyingFiddle
kurtyan at student.chalmers.se
Sun Jan 12 11:12:12 PST 2014
On Sunday, 12 January 2014 at 18:37:40 UTC, Erik van Velzen wrote:
> On Sunday, 12 January 2014 at 18:28:38 UTC, Meta wrote:
>>
>> It looks like your opBinary on strings is an attempt at
>> globally overriding the XOR operator. I'm almost 100% sure
>> this won't work in D. All operator overloads have to be part
>> of a class or struct.
>
> How would I do that without rewriting an entire string class?
Well something like this.
struct MyString
{
string value;
alias value this;
auto opBinary(string op)(string rhs) if( op == "^" )
{
string result;
foreach(i; 0 .. min(value.length, rhs.length))
result ~= value[i] ^ rhs[i];
return MyString(result);
}
}
auto mstr(string s)
{
return MyString(s);
}
auto s = "Hello";
auto s2 = "World";
auto res = s.mstr ^ s2;
or
string res = s.mstr ^ s2; //If you want the result to be a string.
While this works it's not that much better then the simple:
auto s = "Hello";
auto s2 = "World";
auto res = s.xor(s2);
> It seems I can't even inherit from string.
In D a string is not a class its just an immutable array (slice)
of char.
alias string = immutable(char[]);
More information about the Digitalmars-d-learn
mailing list