On Saturday, 2 July 2016 at 00:39:57 UTC, Basile B. wrote:
On Saturday, 2 July 2016 at 00:05:14 UTC, Hiemlick Hiemlicker wrote:
On Friday, 1 July 2016 at 23:55:08 UTC, Adam D. Ruppe wrote:
On Friday, 1 July 2016 at 23:23:19 UTC, Hiemlick Hiemlicker wrote:

I've tried playing with opCall, opAssign, alias this, @property but writeln(s) never calls what I thought it should.

I thought s was short for s() if s was a property. having alias this decrypt and decrypt being a @property should allow this to work?

I think the best you can do is this:

========================
import std.stdio;

struct KryptedString(string value)
{
    alias get this;
    string get() @property
    {
        return "decrypt \"" ~ value ~ "\" here";
    }
}

template krypt(string value)
{
    string process()
    {
        return "crypted"; // encrypt the template param
    }
    enum krypt = KryptedString!process();
}

enum string1 = krypt!"blablabla";
enum string2 = krypt!"blablablabla";

void main()
{
    writeln(string1);
    writeln(string2);
}
========================

The syntax is not so bad.

   enum KryptedString string1 = "blablabla";

is impossible or maybe I don't know the trick yet.

Wait! It almost works! ;)

But you are declaring string 1 and string 2 an enum. If you declare them as a string then the original is embedded in the binary!

I don't know why that would change anything but it does.

The reason it matter is because if one wanted to do a quick change of strings from normal to encrypted, they would also have to change all string variables to enums.




import std.stdio;

struct KryptedString(string value)
{
    alias get this;
    string get() @property
    {
                string q;
                foreach(c; value)
                        q ~= c + 1;
                return q;
    }
}

template krypt(string value)
{
    string process()
    {
                string q;
                foreach(c; value)
                        q ~= c - 1;
                return q;
    }
    enum krypt = KryptedString!process();
}

string string1 = krypt!"Testing 1 2 3 4";
string string2 = krypt!"ttttttaaaabbccd";

void main()
{
    writeln(string1);
    writeln(string2);
    getchar();
}

I guess one could do

enum string1e = krypt!"Testing 1 2 3 4";

then

string string1 = string1e;

but the goal is to make as clean as possible ;)


Reply via email to