Было бы здорово, если бы вы дали мне знать, что такое function
, function[x]
и function[x][y]
.Но в любом случае позвольте мне рассматривать его как объект, объявленный где-то вроде
SomeClass function;
(поскольку вы сказали, что это перегрузка оператора, я думаю, вас не заинтересует массив типа SomeClass function[16][32];
)
Итак, function
является экземпляром типа SomeClass
.Затем найдите объявление SomeClass
для типа возвращаемого значения перегрузки operator[]
, как
ReturnType operator[](ParamType);
Тогда function[x]
будет иметь тип ReturnType
.Снова ищите ReturnType
для перегрузки operator[]
.Если есть такой метод, вы можете использовать выражение function[x][y]
.
Примечание. В отличие от function(x, y)
, function[x][y]
- это 2 отдельных вызова.Поэтому компилятору или среде выполнения сложно гарантировать атомарность, если вы не используете блокировку в контексте.Аналогичный пример: libc говорит, что printf
является атомарным, в то время как последовательные вызовы перегруженного operator<<
в выходном потоке - нет.Оператор типа
std::cout << "hello" << std::endl;
может иметь проблемы в многопоточном приложении, но что-то вроде
printf("%s%s", "hello", "\n");
вполне подходит.