Не знаком с D, я должен предположить, что ваш первый фрагмент кода в итоге вызывает opIndexAssign
с value = someValue
и name = someName
?
Если это так, это может быть сделано в 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
}
Я бы хотел подчеркнуть, что вышеприведенный код не очень красивый / правильно сформированный код, это просто иллюстрация. Это не было проверено.
РЕДАКТИРОВАТЬ: Слишком быстро для меня, Иеремия !!!