가 D에 대해 잘 알고있는 아니, 나는 첫 번째 코드는 value = someValue
와 name = someName
와 opIndexAssign
를 호출 끝한다고 가정 할거야?
그렇다면 C++로 수행 할 수 있지만 그렇게 간단한 방식으로 수행 할 수는 없습니다. 당신은 []
연산자를 오버로드, 다음과 같이 정의 =
연산자 (아주 기본적인, 인위적인 예)와 프록시 개체를 반환 할 수 : 강하게 위/아니라 아주 예쁜 아니라고 강조
class MyProxy
{
public:
MyProxy (int& ref) : valueRef(ref) { }
MyProxy& operator = (int value) { valueRef = value; return *this; }
private:
int& valueRef;
};
class MyClass
{
public:
MyProxy operator [] (std::string name);
private:
int myVal;
};
MyProxy& MyClass::operator [] (std::string name)
{
if (name.compare("myVal"))
return MyProxy(myVal);
...
}
int main ()
{
MyClass mc;
mc["myVal"] = 10; // Sets mc.myVal to 10
}
내가 좋아하는 것 형성 코드, 그냥 그림. 그것은 테스트되지 않았습니다.
편집 : 너무 빨리 나를위한 예레미야 !!!
출처
2011-02-09 20:41:27
Mac
트릭을 해 주셔서 감사합니다. 실제로이 코드는 반복자 남용을 사용하지만 실제로 (거의) D 코드의 구문을 모방 할 수있었습니다 (주로 어떻게 완료되었는지 보여주기 위해). http://codepad.org/YK6uDHDq - 내가 두 번 upvote 할 수 있으면 좋겠어. ! –