有没有相当于 Python @property装饰器的 C++11?

Is there a C++11 equivalent to Python's @property decorator?

本文关键字:C++11 相当于 Python @property 有没有      更新时间:2023-10-16

我真的很喜欢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++中,我可以使用?我可以谷歌一下,但我不确定要搜索的术语。

不是说你应该这样做,事实上,你不应该这样做。但这里有一个解决傻笑的办法(它可能可以改进,但嘿,这只是为了好玩):

#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;
}