대답은 당신이 어떤 종류의 게터 없이는 이것을 할 수 없다는 것입니다. 그러나 getter를 재사용 가능하게 만들 수 있고 괄호없이 필드 작업의 간단한 구문을 (대부분) 만들 수 있습니다.
(C++ 11 필수)
template<typename Friend, typename FieldType>
class crazyconst
{
FieldType value;
friend Friend;
FieldType& operator=(const FieldType& newValue) { return value = newValue; }
public:
operator FieldType(void) const { return value; }
FieldType operator()(void) const { return value; }
};
class A
{
public:
crazyconst<A, int> x;
void doStuff()
{
// Gettin' stuff done
x = 5; // OK
}
};
int main(int argc, char** argv)
{
A a;
int b = a.x;
int c = a.x(); // also works
}
C++ 03 버전 : http://ideone.com/8T1Po
하지만 조심, 이것은 컴파일하지만 예상대로 작동하지 않습니다
const int& the_x = a.x;
a.doStuff();
std::cout << the_x;
OTOH, 괜찮을 것입니다 :
const auto& ref_x = a.x;
a.doStuff();
std::cout << ref_x;
'main'에서 int'y = a.x'가 합법적이어야 함을 의미합니까? 이 경우, 그렇지 않으면 당신은 "단지 사적으로 사용하라!"와 같이 많은 답변을 얻게 될 것이기 때문에 그렇게 말하십시오. – vsz
몇 가지 이상한 언어가 그런 것 같지만 C/C++이 아닙니다. –
에는 public int xMethod() {return x;}가 있고 x는 전용 멤버입니다. – Dhananjay