我是C++的新手,我真正难倒的第一件事就是如何编写一个可以使用点符号来获取属性的getter/setter.
例如,而不是:
myObj.getAlpha();
Run Code Online (Sandbox Code Playgroud)
这将是
myObj.alpha;
Run Code Online (Sandbox Code Playgroud)
在C++中使用这样的点符号是否令人不悦或者设置起来只是一种痛苦?我很难跟踪那些并非完全超出我头脑的例子,所以非常感谢任何指导!
你实际上可以为一个字段实现一个 getter 和 setter
myObj.alpha
Run Code Online (Sandbox Code Playgroud)
但这很难设置并且需要代理类。
这样做的方法是:
template<typename T>
class SetterProxy
{
T *m_T;
public:
SetterProxy(T &property) : m_T(&property) { }
SetterProxy(const SetterProxy&) = delete;
SetterProxy operator =(const SetterProxy&) = delete;
operator T&()
{
return *m_T;
}
T &operator =(T &other)
{
*m_T = other;
return *m_T;
}
}
class MyClass
{
int m_alpha;
public:
SetterProxy<int> alpha;
MyClass() : alpha(m_alpha) { }
}
Run Code Online (Sandbox Code Playgroud)
其他编程语言中的"属性"大多是快速简写 - 一对函数调用的表面简写.其他好处(如元数据)在C++中并不存在.您有以下选择:
getProperty()和setProperty()一对功能.我建议你选择最简单的选项,不要放弃类型安全和封装.只要编译器仍然阻止外部类在您的类中搞乱,公共成员变量就可以了.