Thursday, October 20, 2022

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

Issue

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.



Answered By - iammilind
Answer Checked By - Marilyn (PHPFixing Volunteer)

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.