【发布时间】:2013-12-25 08:52:03
【问题描述】:
想着在C++中模拟C#的属性的方法,想到了以下解决方案:
#include <iostream>
class obj_with_property {
private:
class mykey {};
public:
class int_property {
private:
int m_v;
public:
int_property (int v, mykey) : m_v (v) {
}
int_property & operator = (int v) {
m_v = v;
return * this;
}
operator int () const {
return m_v;
}
};
int_property A;
obj_with_property () : A (int_property (0, mykey ())) {
}
};
int main(int argc, char **argv) {
obj_with_property obj;
std::cout << obj.A << std::endl;
obj.A = 25;
std::cout << obj.A << std::endl;
return 0;
}
我想这种方法可以进一步改进,例如通过制作int_property 模板等。现在我无法想象我是第一个有这个想法的人。有人知道是否在任何地方讨论过类似的方法吗?
【问题讨论】:
-
我在支持的默认值和分层属性中做了那种事情,并且是模板化的。我也曾经支持过 setter(这样
property = x会调用一个函数),但由于我的项目中没有使用它,所以我放弃了它。我认为您的方法是正确的。 -
问题:“有人知道是否在任何地方讨论过类似的方法吗?”在这种情况下,我不必重新发明轮子。
-
没有。我不想讨论如何在 C++ 中模拟属性。我的确切问题是,是否有任何 C++ 大师在众多 C++ 书籍或博客中的任何一本中讨论过这种特殊方法。
-
它甚至在维基百科上,但不幸的是没有引用。 en.wikipedia.org/wiki/Property_%28programming%29#C.2B.2B
标签: c++ properties