Search code examples
c++templatesc++14privatedatamember

What is handy way to modify the private class data members without writing explicit setters? Are templates useful?


I have a class with data members.

class Sph
{
public:
    Sph( float radius , float segments , const Shader& shader );
    Sph(const Sph& geometry);
    Sph& operator = (const Sph& geometry);
    ~Sph();
    void init();
    void CleanUp();
    void draw();
    void CreateUI(QFormLayout* layout);
    std::vector< Sum_Vertices > GetVertices();

private:
    float Radius,Segments;
    bool isInited;
    unsigned int m_VAO, m_VBO , m_IBO;
    int iNumsToDraw;
    bool isChanged;
    Shader shader;
    int indexCount;
};

in order to change the data of the class I have to write individual methods.

void SetRadius( float radius )
{
   this->Radius = radius;
}

Is it possible to write a templated function which can change different data members of the class?


Solution

  • Since the variables are different by names, the template may not help here.


    This is a classic case, where you can use macros to your advantage & ease.

    Definition:

    #define GET_SET(X) X; \ 
        public: const decltype(X)& get_##X() const { return X; } \ 
                void set_##X(const decltype(X)& value) { X = value; } private:
    

    Utility:

    class Sph
    {
       ...
    private:
      float GET_SET(Radius);
      float GET_SET(Segments);
      ...
    };
    

    Usage:

    Sph sph;
    sph.set_Radius(3.3);
    cout << sph.get_Radius() << "\n";
    

    Demo.