我正在尝试向我的类(class)添加setter和getter函数。

在我看来,这样做会使我的类(class)看起来更加整洁。

我想知道哪种方法更好,使用宏还是使用模板,哪种方法更快?

#define PropertyM(type, var) \
private: \
    type _##var; \
public: \
    type Get##var() { return _##var; }\
    void Set##var(type val) { _##var = val; }


template<typename T>
class Property
{
protected:
    T m_val;

public:
    inline Property() {}
    inline Property(T val) { m_val = val; }

    inline void Set(const T &a) { m_val = a; }
    inline T Get() { return m_val; }

    operator T() { return m_val; }
    T &operator=(const T &a) { return m_val = a; }
};


class Test
{
public:
    Test();
    ~Test();

    Property<float> TemplateFloat;
    PropertyM(float, MacroFloat)
};

Test::Test() : TemplateFloat(0.f), _MacroFloat(0.f)
{
    // Just a example
    if (TemplateFloat != 1.f)
        TemplateFloat = 1.f;

    if (TemplateFloat.Get() != 2.f)
        TemplateFloat.Set(2.f);

    if (GetMacroFloat() != 1.f)
        SetMacroFloat(1.f);
}

Test::~Test()
{
}

最佳答案

从客户端功能的 Angular 来看,

Property<float> TemplateFloat;

那再好不过了
float myFloat;

您正在公开一个成员变量,并让用户直接使用成员变量。

该宏不仅提供private成员变量,还提供public getter函数和public setter函数。

基于此,我认为宏方法更好。

08-07 06:19