2014-10-03 2 views
0

Есть ли способ перегрузить оператор индексирования массива в C++, отличный от класса? Я хотел бы назвать пользовательскую функцию при чтении/записи в массиве.Оператор индекса перегрузки массива

Например:

int* array = new int[10]; 
array[0] = 5; 

При записи в массиве [0], я хотел бы назвать свою собственную функцию. Я знаю, что это можно сделать внутри класса, перегружая оператор [] (например, класс SafeArray).

Спасибо.

+0

нет, так как это просто разлагается до установки указателя, а не вызов Вероятно функции. – matsjoyce

+0

Вы не можете перегружать так называемое разыменование указателя ('array [0]' эквивалентно '* (array + 0)'). –

+3

Нет, вы не можете. В качестве простого правила все пользовательские операторы должны принимать по крайней мере один параметр определенного пользователем типа (включая скрытую 'this' для функции-члена). –

ответ

0

То, что вы хотите это класс-оболочка, что-то вроде:

template<typename T> 
struct SubscriptWrapper { 
    SubscriptWrapper(T* array) : array_(array) {}; 
    T& operator[](size_t index) { 
     // your magic goes in here 
    }; 
    T* array_; 
} 
Смежные вопросы