是否有与 Python 的 @property 装饰器等效的 C++11?
Posted
技术标签:
【中文标题】是否有与 Python 的 @property 装饰器等效的 C++11?【英文标题】:Is there a C++11 equivalent to Python's @property decorator? 【发布时间】:2014-05-22 21:28:45 【问题描述】:我真的很喜欢 Python 的 @property
装饰器;即,
class MyInteger:
def init(self, i):
self.i = i
# Using the @property dectorator, half looks like a member not a method
@property
def half(self):
return i/2.0
我可以使用 C++ 中的类似结构吗?我可以用谷歌搜索它,但我不确定要搜索的术语。
【问题讨论】:
不,没有类似的东西。更多文字:***.com/questions/8368512/… 等 我不确定一个方法怎么不是一个类的成员? @user1159791 C++ 领域之外的人倾向于将“成员”仅用于“数据成员”,而“成员函数”是“方法”。 Pythonproperty
以 my_int.half
访问,而不是 my_int.half()
。
我明白了...我习惯将类的任何属性或方法称为“成员”。我不知道人们将它用作财产的同义词。这看起来(对我来说)像一个错误,但这只是文字:p 谢谢你的提示
@deviantfan 谢谢。我想是这样,但我无法从谷歌找到答案。该链接很有启发性。如果你把它作为一个答案,我会接受它。
【参考方案1】:
并不是说你应该,事实上,你不应该这样做。但这里有一个解决方案(它可能可以改进,但只是为了好玩):
#include <iostream>
class MyInteger;
class MyIntegerNoAssign
public:
MyIntegerNoAssign() : value_(0)
MyIntegerNoAssign(int x) : value_(x)
operator int()
return value_;
private:
MyIntegerNoAssign& operator=(int other)
value_ = other;
return *this;
int value_;
friend class MyInteger;
;
class MyInteger
public:
MyInteger() : value_(0)
half = 0;
MyInteger(int x) : value_(x)
half = value_ / 2;
operator int()
return value_;
MyInteger& operator=(int other)
value_ = other;
half.value_ = value_ / 2;
return *this;
MyIntegerNoAssign half;
private:
int value_;
;
int main()
MyInteger x = 4;
std::cout << "Number is: " << x << "\n";
std::cout << "Half of it is: " << x.half << "\n";
std::cout << "Changing number...\n";
x = 15;
std::cout << "Number is: " << x << "\n";
std::cout << "Half of it is: " << x.half << "\n";
// x.half = 3; Fails compilation..
return 0;
【讨论】:
以上是关于是否有与 Python 的 @property 装饰器等效的 C++11?的主要内容,如果未能解决你的问题,请参考以下文章
是否有与 Python 的 cProfile 等效的 Julia 分析器?