是否有与 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++ 领域之外的人倾向于将“成员”仅用于“数据成员”,而“成员函数”是“方法”。 Python propertymy_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?的主要内容,如果未能解决你的问题,请参考以下文章

是否有与 Ruby 符号等效的 Python?

是否有与 Ruby 的字符串插值等效的 Python?

是否有与“which”命令等效的 Python [重复]

是否有与 Python 的 cProfile 等效的 Julia 分析器?

python判断 t1 树是否有与 t2 树拓扑结构完全相同的子树

是否有与 Rails bundler-audit 等效的 Python/Django?