Hello, I'm trying to use templates to define several methods (property setters) within a class to avoid some code duplication.
Here is an attempt:

class Camera
{
private:
    Vector4 m_pos;
    float m_fov, m_ratio, m_near, m_far;
    bool m_matrixCalculated;

public:
void SetProperty(Tin, alias Field)(ref Tin param) @property pure @safe
    {
        Field = param;
        m_matrixCalculated = false;
    }

    alias pos   = SetProperty!(float[], m_pos);
    alias pos   = SetProperty!(Vector4, m_pos);
    alias ratio = SetProperty!(float,   m_ratio);
    alias near  = SetProperty!(float,   m_near);
    alias far   = SetProperty!(float,   m_far);
}

I get this kind of compilation error:
Error: template instance SetProperty!(float[], m_pos) cannot use local 'm_pos' as parameter to non-global template SetProperty(Tin, alias Field)(ref Tin param)

I don't understand why that error occurs.

And I cannot find any elegant solutions (even with mixin's) to declare a template and then instantiate it in a single line to define the methods I want.

Does any of you have an idea?

Thanks

Reply via email to