С ++ ярлык для -> оператора [] - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть класс, я переопределяю оператор [], и он отлично работает, если у меня есть экземпляр класса внутри метода. Но если вы хотите передать его в качестве указателя, мне нужно сделать это для вызова оператора:

function(MyData * myData){
    int myInt = myData->operator[](i);
}

Это выглядит очень уродливо, я мог бы просто не использовать оператор и определить правильную функцию.

Я спрашиваю, есть ли сахар syntacti c, я нуб, поэтому я не уверен, но я мог бы, вероятно, сделать конструктор копирования или что-то еще и скопировать материал в стек и используйте оператор правильно, но это медленно, я бы предпочел получить доступ к памяти напрямую.

Ответы [ 2 ]

7 голосов
/ 06 февраля 2020

Вы можете использовать

int myInt = (*myData)[i];

Это синтаксически эквивалентно

int myInt = myData->operator[](i);

Если вы передадите объект по ссылке, он станет еще проще.

void function(MyData& myData){
    int myInt = myData[i];
}
1 голос
/ 06 февраля 2020

Есть две возможности. Либо напишите

void function( MyData * myData ){
    // ...
    int myInt = ( *myData )[i];
}

, либо введите промежуточную ссылку

void function( MyData * myData ){
    // ...
    MyData &data = *myData;
    int myInt = data[i];
}
...