v4 – vl + v2 + v3: } ///:- Кла

Автор admin Пятница, 22 мая 2009 11:32

v4 – vl + v2 + v3: } ///:- Класс MyVectorSum при создании ничего не вычисляет; он просто сохраняет ссылки на два суммируемых объекта. Вычисление производится только при обращении к компоненту суммы векторов (см. операторную функцию operator[]()). Перегрузка оператора присваивания MyVector с аргументом MyVectorSum предназначена для выражений вида vl – v2 + v3; // Суммирование двух векторов Шаблонное метапрограммирование 245 При вычислении vl + v2 возвращается myVectorSum — компактный объект фиксированного размера, содержащий только две ссылки. Затем вызывается упоминавшийся выше оператор присваивания: v3.operator-(MyVectorSum(v2. v3)): Тем самым каждому элементу v3 присваивается сумма соответствующих элементов vl и v2, вычисляемая в реальном времени. Временные объекты MyVector при этом не создаются. Однако приведенная программа не поддерживает выражения, содержащие более двух операндов: v4 – vl + v2 + v3; Дело в том, что после первого суммирования делается следующая попытка (vl + v2) + v3: Для нее требуется функция operator+() с аргументами MyVectorSum и аргументом MyVector. Можно опреде


Комментарии закрыты.