Giter Site home page Giter Site logo

Comments (4)

wilzbach avatar wilzbach commented on August 17, 2024

From @stonemaster on June 25, 2016 15:17

Yes this is a complex template but it will be difficult to really dive into details in form a tour gem. This gem is in my eyes more directed to people who already this technique from languages like e.g. C++. And for those interested there are far better (and longer articles) that explain this complicated topic in more detail.
Unfortunately I don't see anything how we could make things easier without writing a whole book on this topic. IMO it's still useful for C++ and or other advanced D-newbies..

from english.

wilzbach avatar wilzbach commented on August 17, 2024

Yes this is a complex template but it will be difficult to really dive into details in form a tour gem

I think the main problem here is that the example is too complicated (it has 65 lines). We should try to get it to half of the size. At the moment I don't have concrete ideas though.

his gem is in my eyes more directed to people who already this technique from languages like e.g. C++. And for those interested there are far better (and longer articles) that explain this complicated topic in more detail.

I agree ;-)

from english.

wilzbach avatar wilzbach commented on August 17, 2024

From @ZombineDev on June 26, 2016 7:11

Here's a simpler and more powerful version of the example:

import std.algorithm.searching : countUntil;
import std.meta : Repeat;

struct VecDef(T, names...)
{
    enum N = names.length;
    T[N] _elements;

    this (Repeat!(N, T) elems)
    {
        _elements = [elems];
    }

    ref inout(T) opDispatch(string field)() inout
    {
        enum size_t idx = [ names ].countUntil(field);
        return _elements[idx];
    }
}

unittest
{
    alias Size = VecDef!(uint, `width`, `height`);
    auto s = Size(2, 3);
    s.width++;
    s.height++;
    assert (s.width + s.height == 7);

    alias Color = VecDef!(ubyte, `r`, `g`, `b`, `a`);
    Color c = Color(15, 17, 19, 3);
    assert (c.r == 15);
    assert (c.g == 17);
    assert (c.b == 19);
    assert (c.a == 3);

    alias vec3f = VecDef!(float, `x`, `y`, `z`);
    auto speed = vec3f(0.25, 0.5, 0.125);
    assert (speed.x == 0.25);
    assert (speed.y == 0.5);
    assert (speed.z == 0.125);

}

But, btw this is not template metaprogramming, but typecons. std.meta + std.traits is what I would call pure metaprogramming

from english.

wilzbach avatar wilzbach commented on August 17, 2024

From @ZombineDev on June 26, 2016 7:29

If you want to show is, I would suggest implementing a JSON <-> struct | struct[] | struct[key] serialization / deserialization. AFAIR, last time I did it, it was less than 60 lines. If you want, I can dig up my code.

If you want to show more general introspection, use DbI (e.g. implenting a range that offers all possible primitives depending on the input) or UDAs (e.g. defining a REST interface, or something along the lines of Robert's talk at DConf http://dconf.org/2016/talks/schadek.html)

from english.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.