someThing.text = "blah";
String blah = someThing.text;
但是,上面的代码实际上并没有直接与 someThing 的文本字符串交互,它使用了一个 get 和 set 属性。同样,可以使用只读属性。
有没有办法在原生 C++ 中做类似的事情? (不是 C++ .NET)
原文由 jmasterx 发布,翻译遵循 CC BY-SA 4.0 许可协议
警告:这是一个半开玩笑的回应,太可怕了!!!
是的,这是可能的:)
template<typename T>
class Property
{
private:
T& _value;
public:
Property(T& value) : _value(value)
{
} // eo ctor
Property<T>& operator = (const T& val)
{
_value = val;
return *this;
}; // eo operator =
operator const T&() const
{
return _value;
}; // eo operator ()
};
然后声明你的类,为你的成员声明属性:
class Test
{
private:
std::string _label;
int _width;
public:
Test() : Label(_label)
, Width(_width)
{
};
Property<std::string> Label;
Property<int> Width;
};
并调用 C# 风格!
Test a;
a.Label = "blah";
a.Width = 5;
std::string label = a.Label;
int width = a.Width;
原文由 Moo-Juice 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2.1k 阅读✓ 已解决
3 回答3.5k 阅读
3 回答697 阅读✓ 已解决
1 回答3.3k 阅读
1 回答1.1k 阅读✓ 已解决
1 回答2.2k 阅读
1 回答759 阅读✓ 已解决
在 .NET 中,属性是真正的
get
和set
函数的语法糖,它们在幕后发出(实际上它们不仅仅是语法糖,因为属性是在生成的 IL 和可以与反射一起使用)。因此,在 C++ 中,您需要显式编写这些函数,因为没有属性这样的概念。