gpt4 book ai didi

C++ class property setter getter Macro vs 模板

转载 作者:行者123 更新时间:2023-11-30 03:31:40 25 4
gpt4 key购买 nike

我正在尝试将 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()
{
}

最佳答案

从客户端功能的角度来看,

Property<float> TemplateFloat;

再好不过了

float myFloat;

您公开了一个成员变量并让用户直接使用该成员变量。

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

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

关于C++ class property setter getter Macro vs 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44037870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com