On Sunday, 14 April 2019 at 12:00:38 UTC, Andrey wrote:
I want to mixin only name - not the full function code.

You can't. Best you can do is write the function separately and then mixin an alias for it with the other name.

void main()
{
    enum letters = ['A', 'B', 'C'];

    // normal implementation, parameterized via template
    void printImplementation(char ch)(uint i) {
        import std.stdio;
        writeln(ch, " - ", i);
    }

    static foreach(ch; letters)
    {
        // mixin the name separately
        mixin("alias print" ~ ch ~ " = printImplementation!ch;");
    }

    printB(6);
}


Though, I'd point out the mixin code doesn't have to be too ugly. Consider this:

void main()
{
    enum letters = ['A', 'B', 'C'];

    static foreach(ch; letters)
    {
        mixin(q{
                void print}~ch~q{(int i) {
                    import std.stdio;
                    writeln(ch, " - ", i);
                }
        });
    }

    printB(6);
}


Well, the name part is a big ugly, but the rest of it looks perfectly normal, and the compiler error message still give reasonable results.

Reply via email to