Есть ли C ++ 11 эквивалентный декоратору Python @property?

Мне очень нравится питон @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 ++, которую я могу использовать? Я мог бы погуглить, но я не уверен в терминологии для поиска.

3

Решение

Не говоря, что вы должны, и на самом деле, вы не должны этого делать. Но вот решение для хихиканья (возможно, оно может быть улучшено, но эй, это просто для удовольствия):

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

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector